首页 > 编程语言 >Python-大文件上传requests-toolbelt

Python-大文件上传requests-toolbelt

时间:2023-08-24 10:46:40浏览次数:57  
标签:文件 Python toolbelt logo requests 上传 png

一、简介

requests.post发送文件的方式是把所有文件读取内存中,再构建请求发送出去。当发送大文件时候(好几个G)就会导致内存不足OOM

默认使用的requests.post较难做到分段文件发送(大概思路:先计算原文件md5,再切分文件发送,到接收端组合再计算md5,较麻烦不推荐,可参考:Python之requests模块-大文件分片上传 - 酌三巡 - 博客园 (cnblogs.com)

一般情况,对于python语言,推荐使用requests_toolbelt实现,该库是边读文件到内存中,一边上传。当然其本质还是multipart/form-data 方式提交数据

二:使用方式

首先下载

pip install requests-toolbelt

使用代码:

import requests
from requests_toolbelt import MultipartEncoder

# 边读取文件边上传文件
m = MultipartEncoder(
    fields={'name': 'logo.com',  # 字段1
            "age": '100',  # 字段2
            'file1': ('1.png', open('logo.png', 'rb'), 'image/png'),  # 文件1
            'file2': ('2.png', open('logo.png', 'rb'), 'image/png')  # 文件2
            }
)
r = requests.post('http://www.hangge.com/upload.php', data=m, headers={'Content-Type': m.content_type})
print(r.text)

三:进阶技巧

因为requests-toolbelt使用流来实现文件上传,所以可以根据目前已经读取的数据流实现上传进度监控

import requests
from requests_toolbelt import MultipartEncoder, MultipartEncoderMonitor
def my_callback(monitor):
    progress = (monitor.bytes_read / monitor.len) * 100
    print("\r 文件上传进度:%d%%(%d/%d)" % (progress, monitor.bytes_read, monitor.len), end=" ")


e = MultipartEncoder(
    fields={'name': 'logo.com',  # 参数1
            "age": '100',  # 参数2
            'file1': ('1.png', open('logo.png', 'rb'), 'image/png'),  # 文件1
            'file2': ('2.png', open('logo.png', 'rb'), 'image/png')  # 文件2
            }
)

m = MultipartEncoderMonitor(e, my_callback)

r = requests.post('http://www.hangge.com/upload.php', data=m, headers={'Content-Type': m.content_type})
print(r.text)

运行效果如下:

python怎么使用第三方库requests-toolbelt上传文件流

标签:文件,Python,toolbelt,logo,requests,上传,png
From: https://www.cnblogs.com/chiyun/p/17653549.html

相关文章

  • Python-保存request请求为各种文件
    文件下载相关工具importjsonimportrequestsclassCustomFileTools(object):defdownload_json_file(self,json_url,save_path):"""下载json文件并保存"""json_req=requests.get(json_url)ifjso......
  • python中的 “__name__”属性
       在python中,每个脚本文件都会有自己的__name__属性。在单独运行一个脚本时,name属性会被赋值为__main__,这并不是说当前脚本名字叫main,这个值表示当前脚本是主函数。      如果现在有一个test1脚本和test2脚本。单独运行test1脚本时,这个属性就会被赋......
  • Python-Flask配置https证书
    零、问题错误:SSLVersion2and3ProtocolDetection一、说明1、通过使用flask框架配置https证书进行HTTPs证书配置后会被扫描到漏洞,漏洞描述如下:远程服务接受使用SSL2.0和/或SSL3.0加密的连接。这些版本的SSL受到多个加密缺陷的影响,包括:-带CBCCiphers的不安全的填充方案。......
  • 《流畅的python》— 列表推导与生成器表达式
    列表推导是构建列表(list)的快捷方式,而生成器表达式则可以用来创建其他任何类型的序列。如果你的代码里并不经常使用它们,那么很可能你错过了许多写出可读性更好且更高效的代码的机会。很多Python程序员都把列表推导(listcomprehension)简称为listcomps,生成器表达式(generatorexpre......
  • python-flask小结
    1.flask和django区别1.flask是一个轻量级的,django是一个重量级的,包含了很多组件,包括admin,orm等,flask虽然没有但可以引入第三方组件。2.flask是基于上下文管理做的一个应用上下文appcontext和请求上下文requestcontext管理。django只是通过参数传递。2.flask生命周期......
  • python rasa聊天机器人教程六:服务器部署
    1.准备环境:宝塔+nginx+docker首先在服务器上安装好宝塔,然后在宝塔里面安装nginx+docker2.创建站点宝塔站点里面创建一个站点 3.上传rasa项目的代码到站点目录把之前在本地运行正常的rasa项目代码上传到服务器站点目录上4.修改index.html代码修改站点目录下/www/wwwroo......
  • python - 文件md5校验
    通过md5校验文件,我们可以判断文件内容是否改变,用python实现代码如下importhashlib#1.txt为空文本withopen('1.txt','rb')asf:data=f.read()md5Old=hashlib.md5(data).hexdigest()print(md5Old)#d41d8cd98f00b204e9800998ecf8427e#1.txt内容为12......
  • Python基础
    python学习后缀.py纯Python文件.ipynbJupyterNotebook文件的扩展名,代表IpythonNotebook.pyi类型提示文件,提供代码静态类型信息,帮助开发人员进行类型检查和静态分析命名和对应py文件相同,以便编译器将二者进行关联.pycPython字节码文件的扩展名,存储已编......
  • Python结合文件名将文件复制到匹配的多个文件夹内
       本文介绍基于Python语言,针对一个文件夹下的大量栅格遥感影像文件,基于其各自的文件名,分别创建指定名称的新文件夹,并将对应的栅格遥感影像文件复制到不同的新文件夹下的方法。  首先,我们来看一下本文需要实现的需求。现有一个文件夹,其中有大量.tif格式的栅格遥感影像文件,以......
  • python3_获得文件大小
    1、os.path.getsize(file_path),返回文件字节大小,int类型。importosfile_size=os.path.getsize('/home/pi/jodie/log/jodie-test.log')print(file_size,type(file_size))#947642<class'int'>#显示文件大小为:925kB2、os.stat(file_path).st_size,返回文件字......