2012-05-24 4 views
1

서버에 POST 파일로 파이썬 모듈을 작성하는 중 최대 500MB 크기의 파일을 업로드 할 수 있지만 1GB 파일을 업로드하려고 시도하면 업로드에 실패했습니다. cURL과 같은 것을 사용하면 실패하지 않습니다. 코드를 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 

입니다. 나는 또한 다른 프로그램을 가로 질러왔다. here, 나는 그것을 실행하는 방법을 모른다. 함수 이름을 기반으로 추측하여 실행 해 보았지만 작동하지 않았습니다.

+0

어쩌면 내가 잘못 이해하고 있지만 서버 한도가 500MB이면 1GB 업로드가 실패합니다. – kevin628

+0

나는 cURL을 사용하여 1GB + 파일을 업로드 할 수 있다고 말한 것처럼 제한을 설정하지 않았습니다. – cyberbemon

+0

@cyberbemon : 추적 코드는 코드가 전체 파일을 메모리에로드하려고 시도 함을 보여줍니다 ('fd.read()'). 프로세스에 대한 허용 된 메모리 양을 늘리거나 내용을 스트리밍하십시오 ('curl'은 아마 그렇습니다). http://stackoverflow.com/questions/2502596/python-http-post-a-large-file-with-streaming을 참조하십시오. – jfs

답변

5

해당 스크립트는별로 똑똑하지 않으며 POST 본문을 메모리에 만듭니다.

따라서 1GB 파일을 POST하려면 해당 데이터와 HTTP 헤더, 경계 및 Python과 코드 자체를 저장하는 데 1GB의 메모리가 필요합니다.

값으로 랩핑 된 파일을 request.add_data으로 전달하기 전에 먼저 임시 파일에서 전체 본문을 구성하는 대신 mmap을 사용하도록 스크립트를 다시 작성해야합니다.

달성 방법에 대한 힌트는 Python: HTTP Post a large file with streaming을 참조하십시오.

+0

감사합니다. 나는 그것을보고 업데이트를 게시 할 것입니다. 혹시 두 번째 링크에 게시 된 프로그램을 실행하는 방법을 알고 있습니까? – cyberbemon

+0

무슨 링크가 확실하지 않은가요? –

+0

[여기] (http://code.activestate.com/recipes/146306/) 질문에 게시 된 2 개의 링크가 있습니다. – cyberbemon

관련 문제