gpt4 book ai didi

python-3.x - 二进制文件上传的 aiohttp POST 问题

转载 作者:行者123 更新时间:2023-12-04 00:59:22 28 4
gpt4 key购买 nike

我已经成功使用了requests模块上传二进制文件 (jpg),内容如下:

upload_url = 'http:10.1.1.1:8080/api/media/photo'
headers = {'Authorization': token_string, 'Content-Type': 'image/jpg'}
data = open('photo.JPG', 'rb')
params = {'name': 'photo.JPG'}
r = requests.post(upload_url, params=params, data=data, headers=headers)

现在尝试用 aiohttp 来做到这一点客户。这是我目前所拥有的:

def upload_photos(token):
upload_url = '10.0.1.1:8080/api/media/photo'
headers = {'Authorization': token, 'Content-Type': 'image/jpg'}
data = {'file': open('photo.JPG', 'rb')}
params = {'name': 'photo.JPG'}
r = yield from aiohttp.request('post', upload_url, params=params, data=data, headers=headers)

if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(upload_photos(token))

但我得到了 400 返回,{"detail": "Specified value is invalid: Invalid Content-Length specified"}
好像没有正确发送 photo.jpg。 aiohttp 文档提到了多部分编码文件和流媒体,但这不是我想要的。

如何像在请求中那样使用二进制文件形成类似的 POST,但使用 aiohttp?

最佳答案

感谢您的错误报告。作为解决方法,我想使用分块传输编码:

headers['Transfer-Encoding'] = 'chunked'
r = yield from aiohttp.request('post', upload_url, params=params, data=data, headers=headers, chunked=1024)

配方应该有效,至少我们的测试套件中有非常相似的代码:https://github.com/KeepSafe/aiohttp/blob/master/tests/test_client_functional.py#L322

我会尝试在下一个 aiohttp 版本中为您的上传方式修复 Content-Length 计算。

关于python-3.x - 二进制文件上传的 aiohttp POST 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29414717/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com