Python requests 发送字符串作为文件
with open(full_path, 'r+b') as f:
i=0
while True:
chunk = f.read(max_chunk_size)
if not chunk:
break
with tempfile.TemporaryFile() as t:
t.write(chunk)
t.seek(0)
r = requests.post(endpoint + 'upload_chunk',
files={'chunk':t},
data={'mod_time':file_update_time,
'directory':'/'.join(subdirs),
'filename':filename,
'chunk_pos':i},
auth=auth)
i+=max_chunk_size
在我的代码中,我现在把一个文件分成小块,然后把这些小块读入一个临时文件,再把这个临时文件传给请求。请问有没有办法直接把这些小块发送到服务器,而不需要先写入临时文件,然后再让requests.post去读取这个文件呢?我更希望不需要修改服务器端的代码。我想这样就能省去额外读写4兆字节的数据,从而提高执行速度。
把文件分块是必要的;这段代码还没有完成。
1 个回答
21
可以看看Requests的快速入门页面,特别是上传多部分编码文件这一部分。
在那儿你会看到这样一句话:
如果你想的话,可以发送字符串,让它们被当作文件接收:
>>> url = 'http://httpbin.org/post'
>>> files = {'file': ('report.csv', 'some,data,to,send\nanother,row,to,send\n')}
>>> r = requests.post(url, files=files)
>>> r.text
{
...
"files": {
"file": "some,data,to,send\\nanother,row,to,send\\n"
},
...
}
注意,"file"
是服务器期待的文件上传字段的名字。它对应的HTML代码如下:
<input type="file" name="file">