欢迎来到站圈网!

php远程媒体七牛摇摇node

投稿中心

Python

当前位置: 主页 > 编程语言 > Python

python 使用第三方库requests-toolbelt 上传文件流的示例

时间:2022-09-22|作者:韩、饭饭|点击:

python 使用第三方库requests-toolbelt 上传文件流,内容如下所示:

# pip install requests-toolbelt  使用第三方库上传文件流
from requests_toolbelt.multipart.encoder import MultipartEncoder

python 使用第三方库requests-toolbelt 上传文件流的示例

python 使用第三方库requests-toolbelt 上传文件流的示例

补充:Python使用requests和requests_toolbelt上传文件

一、文件上传(Form 表单方式)【先将文件读取至内存中,再将内存中的文件信息上传至服务器】

1、单文件上传

①文件上传代码,运行后logo.png文件上传至服务器:

import requests
files = {'file1': open('logo.png', 'rb')}
response = requests.post('http://www.hangge.com/upload.php', files=files)
print(response.text)

②显式地设置文件名,文件类型和请求头:

import requests
files = {'file1':
             ('logo.png',  # 文件名
              open('logo.png', 'rb'),  # 文件流
              'image/png',  # 请求头Content-Type字段对应的值
              {'Expires': '0'})
         }
response = requests.post('http://www.hangge.com/upload.php', files=files)
print(response.text)

2、多文件上传

①有时需要在一个请求中同时发送多个文件,同样使用files参数传入一个数组即可:

import requests
files = [
    ('file1', ('1.png', open('logo.png', 'rb'), 'image/png')),
    ('file2', ('2.png', open('logo.png', 'rb'), 'image/png'))
]
response = requests.post('http://www.hangge.com/upload.php', files=files)
print(response.text)

3、上传文件时需要附带其它参数

①如果我们需要在上传文件的同时传递一些其它参数,也是可以的:

import requests

data = {
    "name": "hangge.com",
    "age": 100
}
files = [
    ('file1', ('1.png', open('logo.png', 'rb'), 'image/png')),
    ('file2', ('2.png', open('logo.png', 'rb'), 'image/png'))
]
response = requests.post('http://www.hangge.com/upload.php', data=data, files=files)
print(response.text)

二、流式上传文件【边读取文件边上传文件】

1、requests-toolbelt 扩展库

①有时我们需要上传一个非常大的文件(比如1G左右),如果像上面的方式直接使用Requests提交,可能会造成内存不足而崩溃。

②所以发送大文件时还是建议将请求做成数据流。不过默认情况下Requests不支持流式上传,但有个第三方包requests-toolbelt 是支持的(本质还是multipart/form-data上传)

③requests-toolbelt是python请求的实用程序集合。

2、下载安装requests-toolbelt第三方库

pip install requests-toolbelt

3、使用流式上传文件:

实例:使用requests-toolbelt 来实现文件的流式上传

①不同于requests全部读到内存中上传,requests-toolbelt是边读边上传。

②其本质还是multipart/form-data 方式提交数据,所以服务端代码不需要变化。

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)

4、监听上传进度

①requests-toolbelt库还提供了个监视器MultipartEncoderMonitor,该监视器接受一个回调函数,我们可以在回调中实时跟踪进度。

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使用第三方库requests-toolbelt上传文件流的文章就介绍到这了,更多相关python上传文件流内容请搜索站圈网以前的文章或继续浏览下面的相关文章希望大家以后多多支持站圈网!

版权声明:本文内容由小编收集网络,均来自网络用户自发贡献,版权归原作者所有,Web前端、电脑编程学习类网站不拥有其著作权,亦不承担相应法律责任。具体规则请查看《Web前端、电脑编程学习类网站用户服务协议》和《Web前端、电脑编程学习类网站知识产权保护指引》。如果您发现本站中有涉嫌抄袭的内容,填写联系本站管理员,一经查实,管理员将立刻删除涉嫌侵权内容。

上一篇:Python 代码智能感知类型标注与特殊注释详解

下一篇:PyTorch开源图像分类工具箱MMClassificati

本文标题:python 使用第三方库requests-toolbelt 上传文件流的示例

本文地址:https://www.zhano.cn/python/67478.html

AD300

广告投放 | 联系我们 | 版权申明 | SiteMap

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:15234109 | 邮箱:15234109#qq.com(#换成@)

Copyright © 2019-2022 豫ICP备19001789号