方法1:

  1.安装requests_toolbelt依赖库

    

#代码实现
def upload(self):
login_token = self.token.loadTokenList()
for token in login_token:
tempPassword_url = self.config['crm_test_api']+'/document/upload'
tempPassword_data = self.data_to_str.strToDict('''title:1.png
course_name_id:63
course_id:1112
desc:7
doc_type:1
is_public:1''',value_type='str')
files={'file': ('1.png', open('C:\\Users\\Acer\\Pictures\\Screenshots\\1.png', 'rb'), 'image/png')}
tempPassword_data.update(files)
m = MultipartEncoder(
fields=tempPassword_data
)
tempPassword_headers = {"Content-Type": m.content_type, "token": token}
tempPassword_request = requests.post(url=tempPassword_url,data=m,headers=tempPassword_headers)
print(tempPassword_request.content)
2.组装MultipartEncoder对象需要的参数:将tempPassword_data的字段合并至files
  1.files参数介绍: 
    1.字典key对应file字段(我们系统是这样,具体结合前端实际的字段为准),如图

2.字典value里面的对象:
  1.filename(服务器最终存储的文件名)
  2.filepath(具体的文件路径,注意转义),文件是以二进制的形式进行传输的,所以这里传输时以二进制的形式打开文件并传输
  3.content_type:具体结合前端实际的字段为准:一般可定义为: 文本(text)/图片(image)等
3.tempPassword_data:为文件上传时的附带参数
  strToDict方法:自己手写的一个字符串转dict的方法
  遇到的问题:

这个错误是说,int对象不能被编码,所以需要手动将int对象转换为str,所以我在此方法中定义了value_type这个参数,用于将字典中的所有value转换为str类型

    
#具体代码实现,仅供参考
def strToDict(str_in,value_type=None):
# value_type:转换字典的value为指定的类型,未防止异常,目前仅支持str
# '''将str转换为dict输出'''
# '''将带有time关键字的参数放到字符串末尾'''
# print(str_in)
if str_in:
match_str = ':'
split_str = '\n'
split_list = str_in.split(split_str)
str_in_dict = {}
for i in split_list:
colon_str_index = i.find(match_str)
if colon_str_index == -1:
# '''处理firefox复制出来的参数'''
match_str = '\t' or ' '
colon_str_index = i.find(match_str)
# '''去掉key、value的空格,key中的引号'''
str_in_key = i[:colon_str_index].strip()
str_in_key = str_in_key.replace('"','')
str_in_key = str_in_key.replace("'",'')
# 正则过滤无用key,只保留key第一位为字母数据获取[]_
str_sign = re.search('[^a-zA-Z0-9\_\[\]+]', str_in_key[0])
if str_sign is None:
# 处理value中的空格与转义符
str_in_value = i[colon_str_index + 1:].strip()
str_in_value=str_in_value.replace('\\','')
try:
# 遇到是object类型的数据转换一下
str_in_value=eval(str_in_value)
except BaseException as error:
str_in_value=str_in_value
if value_type in ['str','string']:
str_in_value=str(str_in_value)
else:
str_in_value=str_in_value
str_in_dict[str_in_key] = str_in_value
return str_in_dict
else:
print("参数都没有,还处理个球嘛")
return None
  3.请求时将headers的content设置为m.content_type,会设置headers的content_type为form—data,类型为str:
MultipartEncoder相关源码:

    4.请求时设置data为m,会输出一个MultipartEncoder对象:

方法2:

  直接使用requests,无需依赖requests_toolbelt库

  过程大同小异,也是需要将字典的value转换为str

  注意:headers不要传content_type字段,headers不要传content_type字段,headers不要传content_type字段

  请求时:data对应附加参数,files对应files对象

  

 
#相关代码
def upload(self):
login_token = self.token.loadTokenList()
for token in login_token:
tempPassword_url = self.config['crm_test_api']+'/document/upload'
tempPassword_data = self.data_to_str.strToDict('''title:1.png
course_name_id:63
course_id:1112
desc:7
doc_type:1
is_public:1''',value_type='str')
files={'file': ('1.png', open('C:\\Users\\Acer\\Pictures\\Screenshots\\1.png', 'rb'), 'image/png')}
tempPassword_headers = {"token": token}
tempPassword_request = requests.post(url=tempPassword_url,data=tempPassword_data,files=files,headers=tempPassword_headers)
print(tempPassword_request.json())

  



 

python-requests模拟上传文件-带参数的更多相关文章

  1. js上传文件带参数,并且,返回给前台文件路径,解析上传的xml文件,存储到数据库中

    ajaxfileupload.js jQuery.extend({ createUploadIframe: function(id, uri) { //create frame var frameId ...

  2. vue + axios + formdata 上传文件带参数的爬坑之路

    submitForm(event) { let formData = new FormData() formData.append('name', this.name) formData.append ...

  3. Python基于Python实现批量上传文件或目录到不同的Linux服务器

    基于Python实现批量上传文件或目录到不同的Linux服务器   by:授客 QQ:1033553122 实现功能 1 测试环境 1 使用方法 1 1. 编辑配置文件conf/rootpath_fo ...

  4. postman上传文件对参数的contentType类型设置方式

    项目中使用postman模拟上传文件接口时,总是不成功,发现content-type设置不对,设置head的contentType后,还是不行,后来无意中发现文件参数默认的content-type类型 ...

  5. jquery ajax php 无刷新上传文件 带 遮罩 进度条 效果的哟

    在很多项目中都会叫用户上传东西这些的,自从接触了jquery 和ajax之后就不管做什么,首先都会想到这个,我这个人呢?是比较重视客户体验的,这次我这边负责的是后台板块,然后就有一块是要求用户上传照片 ...

  6. Django之用户上传文件的参数配置

    Django之用户上传文件的参数配置 models.py文件 class Xxoo(models.Model): title = models.CharField(max_length=128) # ...

  7. 【转】php通过curl跨域向asp.net服务器上传文件及参数

    转:http://blog.sina.com.cn/s/blog_13331dce50102vq32.html 这是一个由php通过调用asp.net接口向asp.net服务器post上传文件及参数并 ...

  8. SpringMVC使用MultipartFile文件上传,多文件上传,带参数上传

    一.配置SpringMVC 二.单文件与多文件上传 三.多文件上传 四.带参数上传 一.配置SpringMVC 在spring.xml中配置: <!-- springmvc文件上传需要配置的节点 ...

  9. SWFUpload多图上传、C#后端跨域传文件带参数

    前几天工作中用到了SWFUpload上传图片,涉及到跨域,因为前端无法实现跨域,所以只能把文件传到后端进行跨域请求,整理分享下. 效果图 前端 html部分 <!DOCTYPE html> ...

  10. Requests库上传文件时UnicodeDecodeError: 'ascii' codec can't decode byte错误解析

    在使用Request上传文件的时候碰到如下错误提示: 2013-12-20 20:51:09,235 __main__ ERROR 'ascii' codec can't decode byte 0x ...

随机推荐

  1. 【转载】 实时调度论文中经常出现的术语 ties broken arbitrary的意思 —— 看伪代码时出现 ties broken arbitrary

    看伪代码时突然看到这样的一个Ps标注, ties broken arbitrary,  不明白是啥意思,后来看到下文:https://blog.csdn.net/kangkanglhb88008/ar ...

  2. vue之组件的简单使用

    1.背景 2.组件的简单使用 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  3. Canvas简历编辑器-图形绘制与状态管理(轻量级DOM)

    Canvas简历编辑器-图形绘制与状态管理(轻量级DOM) 在前边我们聊了数据结构的设计和剪贴板的数据操作,那么这些操作都还是比较倾向于数据相关的操作,那么我们现在就来聊聊基本的图形绘制以及图形状态管 ...

  4. Problem - 616C - Codeforces

    Problem - 616C - Codeforces C. The Labyrinth 如果是直接对\(*\)去跑dfs或者bfs的话无疑是会超时的 既然如此,那我们可以去对 \(.\) 跑搜索,将 ...

  5. C# 使用特性的方式封装报文

    在编写上位机软件时,需要经常处理命令拼接与其他设备进行通信,通常对不同的命令封装成不同的方法,扩展稍许麻烦. 本次拟以特性方式实现,以兼顾维护性与扩展性. 思想: 一种命令对应一个类,其类中的各个属性 ...

  6. 安卓如何设置开机启动某个程序?init.rc给你搞定

    一.如何设置开机启动某个程序? 1.需求描述 最近有个项目需要在Android开机启动之后,自动执行一个C语言编写的程序:pengd 该程序运行时需要修改网络ip地址及其他网络操作,所以需要root权 ...

  7. Camera | 6.v4l2拓扑架构

    一. 设备节点.模块.拓扑结构关系 拓扑结构是我们了解MIPI-CSI内部模块以及与摄像头连接关系的最直观最便捷的方法. 1. 如何表示拓扑结构? file视角 v4l2视角 来自: 参考文档< ...

  8. CANopen学习笔记(三)NMT

    NMT NMT主要用来管理和控制各个节点的状态,具体协议可以分为以下四类: NMT protocol Node guard protocol Heartbeat protocol Bootup pro ...

  9. docker高级篇-docker-compose容器编排介绍及实战

    Docker-compose是什么?能干嘛?解决了哪些痛点? 是什么? Docker-compose是Docker官方推出 的一个工具软件,可以管理多个Docker容器组成的一个应用.你需要编写一个一 ...

  10. 【笔记】node常用方法(持续更新)

    1.path.basename(path[, ext]) path <string> ext <string> 可选的文件扩展名. 返回: <string> pat ...