通过 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 图像的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 上使用 Python 通过蓝牙发送 ESC 打印命令?