我已经彻底搜索了stackoverflow,但我无法找到这个问题的答案。
我正在尝试为体式API python wrapper做出贡献。想法是将文件作为任务的附件发布。
在体式API docs中,指定上传的文件"需要是实际文件,而不是字节流。"
我有一个像这样的卷曲请求:
curl -u <api_key>: --form "file=@file.txt" https://app.asana.com/api/1.0/tasks/1337/attachments
它的工作正常。
我现在打算用request完成整个事情。在请求文档中,他们所讨论的是&#34;上传多部分编码文件&#34;。
所以这是我的实际问题:
&#34;上传多部分编码文件&#34;与文件冲突&#34;需要是一个实际的文件,而不是一个字节流&#34;?
如何正确地将工作卷曲转换为请求帖子?
我的去处是
request.post('https://app.asana.com/api/1.0/tasks/task_id/attachments', auth=(<api_key>, ""), data={'file': open('valid_path_to_file.ext', 'rb')})
运行时,我得到了
{"errors":[{"message":"file: File is not an object"}]}
来自体式的。
答案 0 :(得分:2)
您可以将files
参数传递给requests.post
以进行表单编码文件上传。见下面的例子:
import requests
KEY = ''
TASK_ID = ''
url = 'https://app.asana.com/api/1.0/tasks/{0}/attachments'.format(TASK_ID)
with open('file.txt') as f:
files = {'file': f.read()}
r = requests.post(url, auth=(KEY, ''), files=files)
print(r.status_code)
print(r.json())
答案 1 :(得分:0)
这可能完全相同,但您是否尝试在请求网站上分配data参数之外的files参数:
url = 'http://httpbin.org/post'
files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=files)
http://docs.python-requests.org/en/latest/user/quickstart/#more-complicated-post-requests