You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过POST请求以bytes对象提交文件(无需写入本地磁盘)

直接用Bytes对象提交POST文件上传请求

当然可以!完全没必要把从响应中获取的response.content先写入本地磁盘再重新上传——requests库原生支持直接使用字节对象来构造文件上传请求,这样能省掉磁盘IO的步骤,效率更高。

具体做法说明

原来你用open('local.pdf', 'rb')得到的是一个类文件对象,而requests的files参数接受的每个值可以是一个元组,格式为:(文件名, 字节对象, [可选的Content-Type])。这样就能直接把内存里的字节内容当作文件提交。

完整代码示例

import requests

# 先从目标接口下载文件到内存(得到bytes对象)
download_response = requests.get("https://example.com/target-file.pdf")
file_content = download_response.content

# 构造上传用的files参数,直接用内存中的bytes
upload_files = {
    "file": ("my-uploaded-file.pdf", file_content, "application/pdf")
}

# 发送POST上传请求
upload_response = requests.post("https://your-upload-endpoint.com", files=upload_files)

# 可以检查上传结果
if upload_response.status_code == 200:
    print("文件上传成功!")
else:
    print(f"上传失败,状态码: {upload_response.status_code}")

细节补充

  • 元组里的第一个元素是服务器端会接收到的文件名,你可以根据需要自定义,不一定和原文件名一致。
  • 第三个元素的Content-Type是可选的,但建议指定(比如PDF用application/pdf,图片用image/jpeg),这样服务器能更准确地识别文件类型;如果不填,requests会尝试自动推断,但可能出现偏差。
  • 这种方式完全在内存中处理文件,避免了本地磁盘的读写操作,特别适合临时处理文件的场景。

内容的提问来源于stack exchange,提问作者Paul Blackburn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 17:12:28