2017-09-28 17 views
1

投稿リクエストでファイルを送信する必要があります。私のコードは:大きなファイルを送信してPythonでリクエストを投稿する方法

import requests 
data = {"username": user, 
     "password": password,} 

files = {'media': open(file_path, 'rb')} 


r = requests.post(url, data=data, files = files) 

小さなファイルでうまくいきます。しかし、大きなファイル(* .avi> 1gbなど)をアップロードしようとすると、私はMemoryErrorを取得します。私は何をすべきか?

+0

[ファイルをチャンクにストリーミングする](http://docs.python-requests。 org/en/master/user/advanced /#ストリーミングアップロード) – Wondercricket

答えて

0

requests/models.pyの_encode_filesの定義を見ると、readメソッドがファイルに対して呼び出され、ファイル全体を無条件にメモリに読み込むことがわかります。 その結果、ファイルはメモリに収まる必要があります。 実際の制限は、使用可能な仮想メモリによって異なります。 64ビットシステムでは、スワップまたはページファイルを割り当てることでこれをかなり大きくすることができます。 aiohttpなどのモジュールを使用して、独自のファイルエンコード(PUTメソッド)を使用して大きなファイルを送信することができます。

関連する問題