我正在编写一个python模块将POST文件发送到服务器,我可以上传大小高达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,我会说实话,我不知道如何运行它。我尝试通过基于函数名称的猜测来运行它,但这不起作用。
答案 0 :(得分:5)
有问题的脚本不是很聪明,并在内存中构建POST主体。
因此,要POST一个1GB的文件,你需要1GB的内存来保存这些数据,加上HTTP头,边界和python以及代码本身。
您必须重新编写脚本以使用mmap,首先在临时文件中构造整个主体,然后将包含在mmap.mmap
值中的文件传递给request.add_data
。
有关如何实现这一目标的提示,请参阅Python: HTTP Post a large file with streaming。