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

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

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

补充: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上传文件流内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2022-09-19

如何利用python web框架做文件流下载的实现示例

hello 大家好, 前不久公司里有个需求,把时序数据库中的日志下载到本地. 大家都知道. 数据库里的数据 都是存在数据库里的(废话). 想把他下载到客户的本地. 有的同学第一反应是: 只有文件才能下载. 所以大多数同学会想到先把数据从数据库中读出来,然后写入到服务器中的某个文件夹下生成文件, 然后再下载. 其实这是非常不效率的方法, 最简单的方法是,我们从数据库中读取到文件后, 直接以流的形式让用户去下载. 这里我拿python flask框架来做例子,其实非常简单,步骤一共有3个 1: 取出

Python读写csv文件流程及异常解决

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本).纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据.CSV文件由任意数目的记录组成,记录间以某种换行符分隔:每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符.通常,所有记录都有完全相同的字段序列. 特点 读取出的数据一般为字符类型,如果是数字需要人为转换为数字 以行为单位读取数据 列之间

python读写csv文件并增加行列的实例代码

python读写csv文件并增加行列,具体代码如下所示: # -*- coding: utf-8 -*- """ Created on Thu Aug 17 11:28:17 2017 @author: Shawn Yuen """ import csv d = list(range(38685)) with open('./kinetics_test.csv') as f1: f_csv = csv.DictReader(f1) for i,

利用python 读写csv文件

1.读文件 import csv csv_reader = csv.reader(open("data.file", encoding="utf-8")) for row in csv_reader: print(row) csv_reader把每一行数据转化成了一个list,list中每个元素是一个字符串. 2.写文件 读文件时,我们把csv文件读入列表中,写文件时会把列表中的元素写入到csv文件中. list = ["1", "2&

python读写csv文件的方法

1.爬取豆瓣top250书籍 import requests import json import csv from bs4 import BeautifulSoup books = [] def book_name(url): res = requests.get(url) html = res.text soup = BeautifulSoup(html, 'html.parser') items = soup.find(class_="grid-16-8 clearfix").f

python读写csv文件方法详细总结

python提供了大量的库,可以非常方便的进行各种操作,现在把python中实现读写csv文件的方法使用程序的方式呈现出来. 在编写python程序的时候需要csv模块或者pandas模块,其中csv模块使不需要重新下载安装的,pandas模块需要按照对应的 python版本安装. 在python2环境下安装pandas的方式是: sudo pip install pandas 在python3环境下安装pandas的方式是: sudo pip3 install pandas 1.使用csv读写

python读写csv文件实例代码

Python读取与写入CSV文件需要导入Python自带的CSV模块,然后通过CSV模块中的函数csv.reader()与csv.writer()来进行CSV文件的读取与写入. 写入CSV文件 import csv # 需要import csv的文件包 out=open("aa.csv",'wb') # 注意这里如果以'w'的形式打开,每次写入的数据中间就会多一个空行,所以要用'wb' csv_write=csv.write(out,dialect='excel') # 下面进行具体的

Python如何读写CSV文件

CSV文件是一种纯文本文件,它使用特定的结构来排列表格数据. CSV文件内容看起来应该是下面这样的: column 1 name,column 2 name, column 3 name first row data 1,first row data 2,first row data 3 second row data 1,second row data 2,second row data 3 ... 每段数据是如何用逗号分隔的.通常,第一行标识每个数据块--换句话说,数据列的名称.之后的每一行

Python实现的简单读写csv文件操作示例

本文实例讲述了Python实现的简单读写csv文件操作.分享给大家供大家参考,具体如下: python中有一个读写csv文件的包,直接import csv即可 新建test.csv 1.写 import csv with open("test.csv","w",encoding='utf8') as csvfile: writer=csv.writer(csvfile) writer.writerow(["index","a_name&

Python 3.x读写csv文件中数字的方法示例

前言 本文主要给大家介绍了关于Python3.x读写csv文件中数字的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 读写csv文件 读文件时先产生str的列表,把最后的换行符删掉:然后一个个str转换成int ## 读写csv文件 csv_file = 'datas.csv' csv = open(csv_file,'w') for i in range(1,20): csv.write(str(i) + ',') if i % 10 == 0: csv.write

一文秒懂python读写csv xml json文件各种骚操作

Python优越的灵活性和易用性使其成为最受欢迎的编程语言之一,尤其是对数据科学家而言. 这在很大程度上是因为使用Python处理大型数据集是很简单的一件事情. 如今,每家科技公司都在制定数据战略. 他们都意识到,拥有正确的数据(干净.尽可能多)会给他们带来关键的竞争优势. 数据,如果使用有效,可以提供深层次的.隐藏在表象之下的信息. 多年来,数据存储的可能格式显著增加,但是,在日常使用中,还是以 CSV . JSON 和 XML 占主导地位. 在本文中,我将与你分享在Python中使用这三种流