目录
1.背景
在使用requests上传文件时,尽管后台接口上已经做了分片处理,但不知道为何,python脚本还是报了memoryerror。
2.上传大文件
网上也有不少文件上传的代码。这里稍微有所差异的是,前端使用了分片操作,所以请求体中需要传一些参数;此外,文件的二进制流也在请求体中。描述过于复杂,代码更加直接~~
import os
from requests_toolbelt import *
file_path = "D:\\mytest\\myfile.rar"
file_name = "myfile.rar" # 这里为了简化就直接给出文件名了,也可以从文件路径中获取
file_stats = os.stat(file_path)
file_size = file_stats.st_size
with open(file_path, mode='rb') as f:
file_rb = f.read()
def upload_file(file_name, file_size, file_rb):
url = "http://localhost:9090/abc"
item = {
"name": file_name,
"chunkNumber": "1",
"chunkSize": "204800000",
"fileSize": str(file_size),
"file": (file_name, file_rb, "application/x-zip-compressed") # 这里application/x-zip-compressed是从请求接口的header是中看到的
}
temp = MultipartEncoder(data)
data = MultipartEncoderMonitor(temp)
headers = {
"Content-Type": temp.content_type
}
response = request.post(url=url, data=data, headers=headers)
return response
3.参考资料
Python request库大文件传输出现MemoryError问题_可能不需要昵称的博客-CSDN博客
https://www.jb51.net/article/207438.htm
Python-使用multipart-form-data形式上传文件并获取进度_mrbone11的博客-CSDN博客_python 上传文件进度