大文件上传失败

时间:2012-05-24 15:19:58

标签: python post file-upload multipartform-data

我正在编写一个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,我会说实话,我不知道如何运行它。我尝试通过基于函数名称的猜测来运行它,但这不起作用。

1 个答案:

答案 0 :(得分:5)

有问题的脚本不是很聪明,并在内存中构建POST主体。

因此,要POST一个1GB的文件,你需要1GB的内存来保存这些数据,加上HTTP头,边界和python以及代码本身。

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

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