我正在编写一个 python 模块以将文件发布到服务器,我可以上传最大 500MB 的文件,但是当我尝试上传 1gb 文件时上传失败,如果我使用类似cURL 它不会失败。在谷歌搜索如何使用 python 上传 multipart formdata
后,我得到了代码,可以找到代码 here .我刚刚编译并运行了该代码,我得到的错误是这个
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 的新手,很难掌握它。我还遇到了另一个程序 here ,老实说,我不知道如何运行它。我尝试通过根据函数名称猜测来运行它,但这没有用。
有问题的脚本不是很聪明,它会在内存中构建 POST 正文。
因此,要 POST 一个 1GB 的文件,您需要 1GB 的内存来保存该数据,以及 HTTP header 、边界、python 和代码本身。
您必须重新编写脚本以改用 mmap,您首先在临时文件中构造整个主体,然后将该文件包裹在 mmap.mmap
值中以将其传递给 request.add_data
.
参见 Python: HTTP Post a large file with streaming有关如何实现该目标的提示。
我是一名优秀的程序员,十分优秀!