1

我正在开发一项功能,允许用户将图像上传到 Python-Flask Web 应用程序。上传的图像被转换为​​ BytesIO 缓冲区,并且永远不会保存到磁盘。我想用来imghdr.what()判断图片类型(png、jpg等),看看是否是允许用户上传的格式。如果格式不被允许,上传将被拒绝。

根据imghdr.what() 文档,我编写了以下代码,

    image_data.seek(0)
    image_type = imghdr.what(None, h=image_data.read())
    image_data.seek(0)

不幸的是,当我用 png 图像调用它时,它返回None. image_type我用相同的图像尝试了以下变体。

    image_data.seek(0)
    image_type = imghdr.what('', h=image_data.read())
    image_data.seek(0)

同样,以上返回Noneimage_type.

    image_data.seek(0)
    image_type = imghdr.what(None, h=image_data)
    image_data.seek(0)

以上返回错误,TypeError: '_io.BytesIO' object is not subscriptable

    image_data.seek(0)
    image_type = imghdr.what('', h=image_data.read)
    image_data.seek(0)

以上返回相同的错误,TypeError: '_io.BytesIO' object is not subscriptable

这是conftest.py我创建模拟 png 图像的代码,

@pytest.fixture
def test_image_BytesIO():
    test_dir = os.path.dirname(os.path.realpath(__file__))
    local_path = os.path.join(test_dir, 'images/204Cat.png')
    img_bytes = Pimage.open(local_path).tobytes()
    return BytesIO(img_bytes)

我已经看过这些资源:
如何使用 imghdr.what() 的示例 使用 imghdr
在 Python 中
确定图像的类型 使用 Python imghdr 确定图像的类型

TLDR:如何imghdr.what()使用 BytesIO 格式的图像?

4

0 回答 0