我需要在邮寄请求中发送文件。我的代码是:
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 :(得分:0)
如果你看看requests / models.py中_encode_files
的定义,你会发现在文件上调用了read方法,无条件地将整个文件读入内存。
因此,该文件必须适合内存。
实际限制取决于您的可用虚拟内存。在64位系统上,您可以通过分配交换或页面文件使其非常大。
您几乎可以肯定使用像aiohttp
这样的模块和您自己的文件编码(或PUT
方法)来发送更大的文件