我正在开发一项功能,允许用户将图像上传到 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)
同样,以上返回None
为image_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 格式的图像?