【发布时间】:2014-08-26 17:08:08
【问题描述】:
场景
我使用 formData 表单通过 ajax 上传图像,然后将其添加到 MongoDB GridFS 数据库。
这是有效的:
my_image = request.files.my_image
raw = my_image.file.read()
fs.put(raw)
期望的行为
我想在添加到 GridFS 之前使用 Pillow 调整图像大小。
我尝试了什么
我把上面的改成:
my_image = request.files.my_image
raw = Image.open(my_image.file.read())
raw_resized = raw.resize((new_dimensions))
fs.put(raw_resized)
实际行为
我现在收到 500 个错误。尾声:
TypeError: file() argument 1 must be encoded string without NULL bytes, not str
问题
如何正确处理 Pillow 图像对象以便将其添加到 GridFS?
疑难解答
这仍然没有解决,但我只是尝试通过使用解释器来了解文件类型等在流程的不同阶段发生了什么:
>>> my_image = open("my_great_image.jpg")
>>> my_image
<open file 'my_great_image.jpg', mode 'r' at 0x0259CF40>
>>> type(my_image)
<type 'file'>
>>> my_image_read = my_image.read()
>>> my_image_read
# lots of image data
>>> type(my_image_read)
<type 'str'>
>>> my_pil_image = Image.open("my_great_image.jpg")
>>> my_pil_image
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=400x267 at 0x2760CD8>
>>> type(my_pil_image)
<type 'instance'>
因此,我想我可以由此推断,最初,GridFS 正在接受从read() 方法生成的图像的字符串版本。
所以我认为我需要以某种方式将 Pillow 图像对象设为字符串才能将其放入 GridFS。
【问题讨论】:
标签: python-2.7 gridfs pillow