python上传大图时以base64形式导致参数过长,后端迟迟接收不到请求

上传大图这个问题,断断续续困扰了一个月今天终于解决了!!撒花~

下图里base64_data是经过转换的,类型是str

f = open(origin_path, 'rb')
base64_data = base64.b64encode(f.read()).decode('utf-8')

name就是图片的名称,这个图是之前的写法。

以上这种方式对于1M左右的小图可以正常操作,但稍大一些的图就会花费很长很长时间,期间试过设置Tomcat的mastPostSize,Mysql的my.ini里也修改过一些size参数,重启电脑之后没什么用。

查找过程中发现了Poster,但是这个Poster好像对于Python3的支持不是很好,里面有很多东西都是Python2的,所以继续找其它方法,之后发现一个上传大文件时需要的Multipart/form-data参数,但是在上图的headers中加上

'Content-Type': 'multipart/form-data'

也不好使,后台返回对象定义未找到。再继续查找,最终发现了MutipartEncoder

首先导入这个模块,我在Pycharm里搜索不到requests_toolbelt,直接在cmd里pipi install requests_toolbelt,不用指定路径,会自动安装到python安装路径下.参考网上的使用方式,我写出了以下代码内容

boundary不是很清楚它的作用,看了网上对它的解释也还不是很明白,尝试着注释它发现好像对项目的正常运行没有什么影响,于是就不使用这个boundary了。

有一点需要注意的是,Fields里的参数需要是str,如果直接写

"unifile_status":1

不给1加上引号,会报int对象没有encode属性的错。

另外headers['content-type'] = multipart_encoder.content_type其实就是在给headers里加上multipart/form-data参数(不知道为什么直接写到headers里却不行)

至此,百M左右的文件也能很快传输完成了!

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值