1

サーバーにファイルを POST するための Python モジュールを作成中です。最大 500MB のサイズのファイルをアップロードできますが、1GB のファイルをアップロードしようとすると、アップロードに失敗しました。cURL のようなものを使用すると、成功しました。失敗しません。multipart formdataPythonを使用してアップロードする方法をグーグルで調べた後、コードを取得しました。コードはここにあります。そのコードをコンパイルして実行したところ、エラーは次のとおりです

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 本体を構築します。

したがって、1 GB のファイルを POST するには、そのデータに加えて、HTTP ヘッダー、境界、および Python とコード自体を保持するためだけに 1 GB のメモリが必要になります。

代わりに mmap を使用するようにスクリプトを作り直す必要があります。ここでは、mmap.mmap値でラップされたファイルを に渡す前に、最初に一時ファイルに本文全体を作成しますrequest.add_data

それを実現する方法のヒントについては、Python: HTTP Post a large file with streamingを参照してください。

于 2012-05-24T16:00:35.217 に答える