云图网
  • 业界资讯
  • 技术专区
    • 云计算
    • 人工智能
    • 信息安全
    • 大数据
    • 研发管理
    • 大前端
    • 开源
    • 智能运维
    • 编程笔记
    • WordPress
  • 企业战略规划
  • 下载专区
  • 江湖史
  • 随笔记录
登录 注册
投稿
  1. 云图网首页
  2. 技术专区
  3. 编程笔记

Python - Requests(文件上传)

2022年8月27日 17:12 • 编程笔记

文章目录[隐藏]

  • Python - 第三方 HTTP 库 Requests 使用详解 4(文件上传)
    • 五、文件上传(Form 表单方式)
      • 1,单文件上传
      • 2,多文件上传
      • 3,上传时附带其它参数
    • 附:流式上传文件
      • 1,requests-toolbelt 扩展库
      • 2,使用流式上传文件
      • 3,监听上传进度


文件上传(Form 表单方式) 1,单文件上传 (1)下面是最简单的文件上传代码,运行后将 logo.png 这个文件上传到服务器: import requests......

Python - 第三方 HTTP 库 Requests 使用详解 4(文件上传)

2022-06-29 发布:hangge 阅读:5936

五、文件上传(Form 表单方式)

1,单文件上传

(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)

(2)我们也可以显式地设置文件名,文件类型和请求头:

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

(3)服务端代码(upload.php)

<? 
move_uploaded_file($_FILES["file1"]["tmp_name"],
    $_SERVER["DOCUMENT_ROOT"]."/uploadFiles/" . $_FILES["file1"]["name"]);
?>

2,多文件上传

(1)有时我们需要在一个请求中同时发送多个文件,同样使用 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)

(2)服务端代码(upload.php)

<? 
move_uploaded_file($_FILES["file1"]["tmp_name"],
    $_SERVER["DOCUMENT_ROOT"]."/uploadFiles/" . $_FILES["file1"]["name"]);
  
move_uploaded_file($_FILES["file2"]["tmp_name"],
    $_SERVER["DOCUMENT_ROOT"]."/uploadFiles/" . $_FILES["file2"]["name"]);
?>

3,上传时附带其它参数

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

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)

(2)服务端代码(upload.php)

<? 
$value1 = $_POST["name"];
$value2 = $_POST["age"];
 
move_uploaded_file($_FILES["file1"]["tmp_name"],
    $_SERVER["DOCUMENT_ROOT"]."/uploadFiles/" . $_FILES["file1"]["name"]);
 
move_uploaded_file($_FILES["file2"]["tmp_name"],
    $_SERVER["DOCUMENT_ROOT"]."/uploadFiles/" . $_FILES["file2"]["name"]);
?>

附:流式上传文件

1,requests-toolbelt 扩展库

(1)有时我们需要上传一个非常大的文件(比如 1G 左右),如果像上面的方式直接使用 Requests 提交,可能会造成内存不足而崩溃。
(2)所以发送大文件时还是建议将请求做成数据流。不过默认下 Requests 不支持流式上传,但有个第三方包 requests-toolbelt 是支持的(本质还是 multipart/form-data 上传) (3)在使用 requests-toolbelt 之前,我们首先通过 pip 进行安装:

pip install requests-toolbelt

2,使用流式上传文件

下面样例我们使用 requests-toolbelt 来实现文件的流式上传:

  • 不同于 requests 全部读到内存中上传,requests-toolbelt 是边读边上传。
  • 其本质还是 multipart/form-data 提交数据,所以服务端代码不需要变化。
import requests
from requests_toolbelt import MultipartEncoder
 
m = MultipartEncoder(
    fields={'name': 'hangge.com', "age": '100',
            'file1': ('1.png', open('logo.png', 'rb'), 'image/png'),
            'file2': ('2.png', open('logo.png', 'rb'), 'image/png')}
    )
r = requests.post('http://www.hangge.com/upload.php', data=m,
                  headers={'Content-Type': m.content_type})
print(r.text)

3,监听上传进度

(1)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': 'hangge.com', "age": '100',
            'file1': ('1.png', open('logo.png', 'rb'), 'image/png'),
            'file2': ('2.png', open('logo.png', 'rb'), 'image/png')}
    )
 
 
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)

(2)运行效果如下,可以看到提交过程中会实时显示进度: Python - Requests(文件上传)

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/282518.html

$requestsFileslogopng上传
赞 (0)
0 0
生成海报
Python环境安装
上一篇 2022年8月27日 17:11
学习:python进阶 (一)
下一篇 2022年8月27日 17:12

相关推荐

  • [极客大挑战 2019]Upload 1 2022年9月6日
  • java实现大文件上传分片上传断点续传 2022年7月20日
  • 如何使用 multiparty 工具库在 Node.js 应用里解析 multipart form-data 格式的请求 2022年7月30日
  • Vulfocus靶场 | tomcat-pass-getshell 弱口令 2022年8月7日
  • ssis SQL Server Integration Services 2022年6月14日
  • php图片上传代码 2022年7月10日
  • 13.文件的上传与下载 2022年7月9日
  • 在 Yii 2.0 中,一键多渠道发布(即在一个接口请求中,批量调用多个接口请求) 的实现 2022年4月29日
  • 图片综合知识 2022年7月26日
  • Apache SSI 远程命令执行漏洞复现 2022年4月18日

发表回复

请登录后评论...
登录后才能评论

热门标签

AI (11871) aliyun (95062) Android (10391) c (14593) go (7786) google (20654) html (8304) https (10802) iPhone (21436) jd (7444) linux (18686) MD (8346) microsoft (7561) Phone (21786) python (7226) windows (18482) 人工智能 (9889) 安全 (28526) 开源 (16950) 微软 (13275) 手机 (21138) 游戏 (13254) 百度 (7189) 硬件 (14378) 美国 (20456) 苹果 (10017) 观察 (7533) 谷歌 (8726) 车 (28069) 通信 (7496)
  • 欢迎投稿
  • 隐私政策
  • 使用协议
  • 服务条款
  • 版权声明

Copyright © 2006-2025 YTSO.COM 版权所有 鲁ICP备15002310号-3 Powered by WordPress

免责声明:本站信息来自互联网收集分享,版权归原创者所有,如果侵犯了您的权益,请发邮件给39941211@qq.com通知我们删除.