1

我正在编写一个 python 模块来将文件发布到服务器,我可以上传大小最大为 500MB 的文件,但是当我尝试上传 1gb 文件时,上传失败,如果我使用类似 cURL 的东西,它就赢了不会失败。我在谷歌搜索如何multipart formdata使用 python 上传后得到了代码,代码可以在这里找到。我刚刚编译并运行了该代码,我得到的错误是这个

Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    opener.open("http://127.0.0.1/test_server/upload",params)
  File "C:\Python27\lib\urllib2.py", line 392, in open
    req = meth(req)
  File "C:\Python27\MultipartPostHandler.py", line 35, in http_request
    boundary, data = self.multipart_encode(v_vars, v_files)
  File "C:\Python27\MultipartPostHandler.py", line 63, in multipart_encode
    buffer += '\r\n' + fd.read() + '\r\n'  
MemoryError

我是 python 新手,很难掌握它。我还在这里遇到了另一个程序,老实说我不知道​​如何运行它。我尝试通过根据函数名称猜测来运行它,但这不起作用。

4

1 回答 1

5

有问题的脚本不是很聪明,而是在内存中构建 POST 正文。

因此,要发布一个 1GB 的文件,您将需要 1GB 的内存来保存该数据,加上 HTTP 标头、边界、python 和代码本身。

您必须重新编写脚本以使用 mmap 代替,您首先在临时文件中构造整个主体,然后将该文件包裹在一个mmap.mmap值中以将其传递给request.add_data.

有关如何实现这一点的提示,请参阅Python:HTTP Post a large file with streaming 。

于 2012-05-24T16:00:35.217 回答