python请求将字符串作为文件发送

时间:2014-06-27 03:02:25

标签: python 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 个答案:

答案 0 :(得分:10)

请仔细阅读Quickstart page部分下的请求POST a Multipart-Encoded File

你会发现这个:

  

如果需要,您可以发送要作为文件接收的字符串:

>>> 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">