方法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)等[/code][code]

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 request file upload_Python基于requests实现模拟上传文件相关推荐

  1. python request 库传送formdata_Python Requests库 form-data 上传文件操作

    请求数据示例: ------WebKitFormBoundaryKLoWgrA4O40MayHM Content-Disposition: form-data; name="id" ...

  2. Python实现GCS bucket断点续传功能,分块上传文件

    Python实现GCS bucket断点续传功能,分块上传文件 环境:Python 3.6 我有一个关于使用断点续传到Google Cloud Storage的上传速度的问题.我已经编写了一个Pyth ...

  3. web ui自动化之模拟上传文件操作

    文章目录 前言 方法一.使用Autolt生成exe文件,在Python中调用 AutoIt介绍及安装 定位元素插件的使用 编写脚本 将脚本转换成可执行文件 python代码 在python中调用 方法 ...

  4. 6.基于vue封装的上传文件等功能

    效果图如下: 文件所在位置: view/huge_file_upload/huge_file_upload.vue:(在项目中使用?) <template><div><d ...

  5. php is uploaded file,is_uploaded_file函数引发的不能上传文件问题

    is_uploaded_file函数引发的不能上传文件问题 更新时间:2013年10月29日 16:20:11   作者: 不能上传文件,都返回失败.经过排查发现是PHP中的is_uploaded_f ...

  6. python request file upload_Python request 上传文件

    我尝试用 curl 提交成功 curl --form file=@/home/test/sample.png --form username=test@noreply.com --form passw ...

  7. 使用postman模拟上传文件到springMVC的坑:the request was rejected because no multipart boundary was found...

    参考该文解决问题:http://blog.csdn.net/sanjay_f/article/details/47407063 报错 threw exception [Request processi ...

  8. 学习日志day41(2021-09-03)(1、文件的上传 2、文件的查看 3、文件的下载 4、使用工具类上传文件 5、基于servlet3.0以上的文件上传 )

    学习内容:学习JavaWeb(Day41) 1.文件的上传 2.文件的查看 3.文件的下载 4.使用工具类上传文件 5.基于servlet3.0以上的文件上传 1.文件的上传 (1)实现文件的上传需要 ...

  9. java 模拟post上传文件_Java模拟post请求上传文件

    Java代码实现 /** * 模拟文件post上传 * @param urlStr(接口地址) * @param formName(接口file接收名) * @param fileName(需要上传文 ...

最新文章

  1. keras Regressor 回归
  2. python垂直输出hello_python - 我如何获得直方图以垂直输出数据? - SO中文参考 - www.soinside.com...
  3. oauth最后的确认按钮_绕过GitHub的OAuth授权验证机制($25000)
  4. ACM学习历程—HDU2476 String painter(动态规划)
  5. map和reduce
  6. 删除IBASE component时遇到data_not_consistent的exception
  7. nw.js FrameLess Window下的窗口拖拽与窗口大小控制
  8. C语言实现去掉字符串中指定的字符
  9. 【BZOJ2460】元素,线性基+贪心
  10. android 四周发散阴影,view 添加四周阴影效果
  11. jsp 如何动态给图片赋值_在Excel表格中你知道如何动态引用图片吗?
  12. Atitit 网盘使用法 艾提拉著 目录 1. 需要解决几个问题 2 1.1. 多关键词搜索的问题 使用every索引解决 2 1.2. 重要文具类索引使用分类索引 日志 crm类增加000前缀
  13. 一键解决Win10 LTSC 2021官方镜像存在的问题
  14. centos7 aarch64 环境编译安装MP4Box
  15. win10电脑时间同步设置方法
  16. 从写博到出书:过程全记录
  17. 阿里Leader都干些啥
  18. 在安卓系统上使用NFC技术的模拟M1卡的探索之路
  19. Word中下划线自动换行版式不…
  20. 前端面试题总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)持续更新

热门文章

  1. 这所211高校通知不放寒假!校园将实行封闭管理!
  2. YOLOv4 中的 Mish 激活函数
  3. 科技部:论文数量、影响因子不可与奖励奖金挂钩,网友:早就该治了
  4. Github 高赞的 YOLOv5 引发争议?Roboflow 和开发者这样说...
  5. 他676分考上清华却没微信,看到他的手机后大家沉默了
  6. python判断一个数是整数、浮点数还是字符串
  7. ValueError: not enough values to unpack (expected 3, got 0)问题
  8. 干货|理解attention机制本质及self-attention
  9. 双目视惯雷达SLAM
  10. 实战:动手搭建一个开源动作相机