方法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())
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 张学友《走过1999》2023头版蜚声环球限量编号[低速原抓WAV+CUE][1G]
- 田震《真的田震精品集》头版限量编号24K金碟[低速原抓WAV+CUE][1G]
- 林俊杰《伟大的渺小》华纳[WAV+CUE][1G]
- 谭艳《遗憾DSD》2023 [WAV+CUE][1G]
- Beyond2024《真的见证》头版限量编号MQA-UHQCD[WAV+CUE]
- 瑞鸣唱片2024-《荒城之月》SACD传统民谣[ISO]
- 好薇2024《兵哥哥》1:124K黄金母盘[WAV+CUE]
- 胡歌.2006-珍惜(EP)【步升大风】【FLAC分轨】
- 洪荣宏.2014-拼乎自己看【华特】【WAV+CUE】
- 伊能静.1999-从脆弱到勇敢1987-1996精选2CD【华纳】【WAV+CUE】
- 刘亮鹭《汽车DJ玩主》[WAV+CUE][1.1G]
- 张杰《最接近天堂的地方》天娱传媒[WAV+CUE][1.1G]
- 群星《2022年度发烧天碟》无损黑胶碟 2CD[WAV+CUE][1.4G]
- 罗文1983-罗文甄妮-射雕英雄传(纯银AMCD)[WAV+CUE]
- 群星《亚洲故事香港纯弦》雨果UPMAGCD2024[低速原抓WAV+CUE]