通过 Python 请求发送 PIL 图像

Posted

技术标签:

【中文标题】通过 Python 请求发送 PIL 图像【英文标题】:Sending a PIL image through Python requests 【发布时间】:2021-03-12 18:04:26 【问题描述】:

我需要创建一个图像并将其保存在数据库中。我正在使用 python Pillow 创建它并将其保存为 JPEG。

image = Process().mandelbrot(width, height, max_iter)

mem_file = BytesIO()
image.save(mem_file, "JPEG", quality=100)
mem_file.seek(0)

创建后,我尝试通过 python-requests 将其保存在数据库中

form_data = 'image': ('mandelbrot'+str(uuid.uuid4().hex), mem_file)
requests.post(url='http://database:5000/images', files=form_data)

我正在尝试发送表单数据请求,但是当我检查进入我的数据库的数据时,找不到文件并且它的值为无

ImmutableMultiDict([('image', <FileStorage: 'mandelbrot8a9275e838a04a0f94b731c47bc6bdd4' (None)>)])

有谁知道我如何发送 PIL 文件并使用表单数据 mimetype 抛出 python 请求而不获取具有 None 值的文件?

【问题讨论】:

请尝试修改:form_data = 'image': ('mandelbrot'+str(uuid.uuid4().hex), mem_file.getvalue()) 你做对了,问题出在接收端,你可以尝试添加 mime 类型并作为 3 元素元组的字典发送 form_data= "image": ("image.jpeg", mem_file, "image/jpeg") 你好@mugiseyebrows 我用你的建议更新了我的代码,它成功了,非常感谢 【参考方案1】:

正如@mugiseyebrows 所说我做错了,表单数据应该如下

form_data= "image": ("image.jpeg", mem_file, "image/jpeg")

通过这种方式发送 mime 类型,我能够使用表单数据请求发送我的图像 throw python 请求

洞码变成了下面

image = Process().mandelbrot(width, height, max_iter)

mem_file = BytesIO()
image.save(mem_file, "PNG", quality=100)
mem_file.seek(0)
        
id = 'mandelbrot'+str(uuid.uuid4().hex)

requests.post(url='http://database:5000/images', files='image': ('file.PNG', mem_file, 'image/png'), params='id': id) 

【讨论】:

以上是关于通过 Python 请求发送 PIL 图像的主要内容,如果未能解决你的问题,请参考以下文章

如何将 PIL 生成的图像发送到浏览器?

如何在 Android 上使用 Python 通过蓝牙发送 ESC 打印命令?

使用 Python / PIL 进行多边形裁剪/剪辑

使用 Python/PIL 读取 SVG 文件

使用 Python 旋转具有 EXIF 中指定方向的图像,而不使用 PIL,包括缩略图

使用 Python 向 API Prestashop 发送 POST 请求