import requests

def sendImg(img_path, img_name, img_type='image/jpeg'):
"""
:param img_path:图片的路径
:param img_name:图片的名称
:param img_type:图片的类型,这里写的是image/jpeg,也可以是png/jpg
"""
url = 'https://www.xxxxxxxxxx.com' # 自己想要请求的接口地址

with open(img_path + img_name, "rb")as f_abs:# 以2进制方式打开图片
body = {
# 有些上传图片时可能会有其他字段,比如图片的时间什么的,这个根据自己的需要

'camera_code': (None, "摄像头1"),

'image_face': (img_name, f_abs, img_type)
# 图片的名称、图片的绝对路径、图片的类型(就是后缀)

"time":(None, "2019-01-01 10:00:00")

}
# 上传图片的时候,不使用data和json,用files
response = requests.post(url=url, files=body).json
return response

if __name__=='__main__':
# 上传图片
res = sendImg(img_path, img_name) # 调用sendImg方法
print(res)

**如果上传图片是数组时,value直接写图片路径就可以**

#---------------------------------------------------------------------------------------------------------------------------------------------------------------------

# "Content-Type": "multipart/form-data; boundary=76a22e30da2bb7790828887966871012"
from urllib3 import encode_multipart_formdata
import requests

def sendFile(filename, file_path):
"""
:param filename:文件的名称
:param file_path:文件的绝对路径
"""
url = "https://www.xxxxxxx.com" # 请求的接口地址
with open(file_path, mode="r", encoding="utf8")as f: # 打开文件
file = {
"file": (filename, f.read()),# 引号的file是接口的字段,后面的是文件的名称、文件的内容
"key": "value", # 如果接口中有其他字段也可以加上
}

encode_data = encode_multipart_formdata(file)

file_data = encode_data[0]
# b'--c0c46a5929c2ce4c935c9cff85bf11d4\r\nContent-Disposition: form-data; name="file"; filename="1.txt"\r\nContent-Type: text/plain\r\n\r\n...........--c0c46a5929c2ce4c935c9cff85bf11d4--\r\n

headers_from_data = {
"Content-Type": encode_data[1],
"Authorization": token
}
# token是登陆后给的值,如果你的接口中头部不需要上传字段,就不用写,只要前面的就可以
# 'Content-Type': 'multipart/form-data; boundary=c0c46a5929c2ce4c935c9cff85bf11d4',这里上传文件用的是form-data,不能用json

response = requests.post(url=url, headers=headers_from_data, data=file_data).json()
return response

if __name__=='__main__':
# 上传文件
res = sendFile(filename, file_path) # 调用sendFile方法
print(res)

1、https://blog.csdn.net/xy_best_/article/details/92839653

2、https://www.jianshu.com/p/231e4773f7f3

3、https://www.jianshu.com/p/0023bb7afddb

multipart_formdata的更多相关文章

  1. 打造适用于c#的feign

    之前因为工作原因使用spring cloud全家桶开发过若干项目,发现其中的feign非常好用,以前开发接口客户端的时候都是重复使用HttpClient实现业务,每次新增接口都十分繁琐,故萌生了自定义 ...

随机推荐

  1. muduo网络库源码学习————日志滚动

    muduo库里面的实现日志滚动有两种条件,一种是日志文件大小达到预设值,另一种是时间到达超过当天.滚动日志类的文件是LogFile.cc ,LogFile.h 代码如下: LogFile.cc #in ...

  2. 4)drf序列化组件 Serializer(偏底层)、ModelSerializer(重点)、ListModelSerializer(辅助群改)

    知识点:Serializer(偏底层).ModelSerializer(重点).ListModelSerializer(辅助群改) 一.Serializer 偏底层 一般不用 理解原理 1.序列化准备 ...

  3. 在linux上搭建nacos集群(步骤详细,linux小白也搞得定)

    (1)nacos官网:https://github.com/alibaba/nacos/releases/tag/1.2.1下载nacos安装包到window本地(后缀为tar.zip) (2)在li ...

  4. Z - New Year Tree CodeForces - 620E 线段树 区间种类 bitset

    Z - New Year Tree CodeForces - 620E 这个题目还没有写,先想想思路,我觉得这个题目应该可以用bitset, 首先这个肯定是用dfs序把这个树转化成线段树,也就是二叉树 ...

  5. E - No Pain No Game 线段树 离线处理 区间排序

    E - No Pain No Game  HDU - 4630 这个题目很好,以后可以再写写.这个题目就是线段树的离线写法,推荐一个博客:https://blog.csdn.net/u01003321 ...

  6. Linux暂时提升非root用户的权限

    sudo 用于提升非root用户的某些命令执行权限 1,使用root用户,复制vim /etc/sudoers 文件的第91行修改为,想提升的用户名称 root ALL=(ALL) ALL admin ...

  7. mybatis添加信息自动生成主键

    一.使用Oracle数据库 举例:添加员工的时候自动生成主键 1.在dao接口中声明方法 2.在mapper中实现该方法 需要先在数据表中创建序列 3.测试 注意:在调用过save方法之后,emp对象 ...

  8. C++关闭同步流 ios::sync_with_stdio(false)

    说明:ios::sync_with_stdio(false) 1.这句语句是用来取消cin的同步,什么叫同步呢?就是iostream的缓冲跟stdio的同步.这就是为什么cin和cout比scanf和 ...

  9. OpenWrt(LEDE)2020.4.29更新 UPnP+NAS+多拨+网盘+DNS优化+帕斯沃 无缝集成+软件包

    交流群:QQ 1030484865 电报:  t_homelede   固件说明 基于Lede OpenWrt R2020.4.8版本(源码截止2020.4.29)Lienol Feed及若干自行维护 ...

  10. 嫌弃Apriori算法太慢?使用FP-growth算法让你的数据挖掘快到飞起

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第20篇文章,我们来看看FP-growth算法. 这个算法挺冷门的,至少比Apriori算法冷门.很多数据挖掘的教材还会 ...