繁体   English   中英

python请求使用其他数据上传大文件

[英]python requests upload large file with additional data

我一直在寻找使用其他数据上传大文件的方法,但似乎没有任何解决方案。 要上传文件,我一直在使用这个代码,并且它与小文件一起正常工作:

with open("my_file.csv", "rb") as f:
    files = {"documents": ("my_file.csv", f, "application/octet-stream")}
    data = {"composite": "NONE"}
    headers = {"Prefer": "respond-async"}
    resp = session.post("my/url", headers=headers, data=data, files=files)

问题是代码在发送之前加载整个文件,并且在上传大文件时会遇到MemoryError。 我环顾四周,流式传输数据的方式是设置

resp = session.post("my/url", headers=headers, data=f)

但我需要在数据中添加{“composite”:“NONE”}。 如果没有,服务器将无法识别该文件。

您可以使用requests-toolbelt执行此操作:

import requests
from requests_toolbelt.multipart import encoder

session = requests.Session()
with open('my_file.csv', 'rb') as f:
    form = encoder.MultipartEncoder({
        "documents": ("my_file.csv", f, "application/octet-stream"),
        "composite": "NONE",
    })
    headers = {"Prefer": "respond-async", "Content-Type": form.content_type}
    resp = session.post(url, headers=headers, data=form)
session.close()

这将导致请求为您流式传输multipart/form-data

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM