通过七牛云base64上传图片,通过官方示例上传成功后,根据示例改了一个controller。

通过前端往后端传base64码形式进行测试。死活不通过,七牛报400。

仔细排查后发现,示例转换的base64码与前端传来的base64码稍有区别,

前端通过post传入的base64码将 “+”  号改成了  空格 。

网上解决方案

前台处理 :java方法:URLEncoder.encode(str,"UTF-8");js 方法encodeURIComponent(str);

后台处理:URLDecoder.decode(str,"UTF-8");

经测试,编码形式 会改变一些其他字符,例如 “=”变成了“%3D”

解决方案。

一、JAVA 后端对字符串进行替换

url = url.replaceAll(" ","+");

经过测试,成功。

或者是,前端通过请求头方式去控制。

  • base64加密参数Http传输

base64中,加号(+)是base64编码的一部分,如果将+号转变为空格,就会导致解密失败。

现在应该很清楚为什么base64后,通过http请求后,数据丢失的原因了吧。

1、Base64加密后的数据:

gLi5lSf1FW+r1nuhjheOlA2vYlbt1U9kOKnGPPG/LZU+J7qlqUSckCtGfRiQkkqgfZHwEGaBZkpGWuIyZ+tCegU8xj85Xp7bG3Fyfd6k=

在对Base64加密进行http传输时,后台收到的数据会出现空格的现象。如下

gLi5lSf1FW r1nuhjheOlA2vYlbt1U9kOKnGPPG/LZU J7qlqUSckCtGfRiQkkqgfZHwEGaBZkpGWuIyZ tCegU8xj85Xp7bG3Fyfd6k=

这就导致传输的数据和接收的数据不一致,导致解密失败

2、base64 http请求,如何将+号进行urlEncode

设置http请求头(对参数进行urlEncode操作) 
Content-Type: application/x-www-form-urlencoded

3、Base64 urlEncode后:

gLi5lSf1FW%2r1nuhjheOlA2vYlbt1U9kOKnGPPG/LZU%2J7qlqUSckCtGfRiQkkqgfZHwEGaBZkpGWuIyZ%2tCegU8xj85Xp7bG3Fyfd6k=

4、后台接收的数据:

gLi5lSf1FW+r1nuhjheOlA2vYlbt1U9kOKnGPPG/LZU+J7qlqUSckCtGfRiQkkqgfZHwEGaBZkpGWuIyZ+tCegU8xj85Xp7bG3Fyfd6k=

这时,接收的base64数据和传输的是结果一致,可以正常解密了。

  • 什么是:application/x-www-form-urlencoded

简单的讲就是form表单提交。 
浏览器会对form表单的数据进行url编码,把form数据转换成一个字串(name1=value1&name2=value2…),然后把这个字串append到url后面,用?分割,加载这个新的url

如果表单有加号(+),url编码后会变为%2,这时后接收数据后,对参数解码后转变为+号 
如果表单有空格,url编码后会变为+,后台接收数据化,解码变为空格

2018-11-29更新

今天协助公司程序对接XXX仕支付公司的支付接口出现了这个问题,需要他们协助解决,加密报文中有Base64加密成的“+”号http换成了空格,结果对方也不同意协助,做个记录吧

base64码通过http传输 +号变 空格 问题解决的更多相关文章

  1. base64码通过http传输 +号变 空格 以及 图片编码后字符串较长导致POST提交失败 问题解决

    场景:图片上传OSS存储,接口拿字符串去接前端传的base64码,服务器打印入参传的值,发现和前端打印的值有所区别,服务器中打印的值所有+号全部变成空格. 解决办法: Java中使用:url = ur ...

  2. tomcat自动URLDecode解码问题(+号变空格)

    最近项目中出现一个问题,就是前段调后端接口,参数带+号,传到后端后+号自动URLDecode成空格了. 1.问题排查 条件:tomcat配置server.xml有URIEncoding="U ...

  3. 对于querystring取值时候发生+号变空格的问题

    今天遇到这个问题,在网上找了几个答案,解决了问题,很高兴,所以贴出来给大家分享一下: URL如下 http://127.0.0.1/test/test.aspx?sql= and id='300+' ...

  4. 【PHP】图片转换为base64,经过post传输后‘+’会变成 ‘空格’

    图片转换为base64,经过post传输后‘+’会变成 ‘空格’, 需要用PHP 处理一下 $str= $_POST['img_data']; $str= str_replace(' ','+',$s ...

  5. 加号变空格问题 url参数 post get 请求发送

    问题:加号后台接收变空格问题 结论: 1.任何get拼接的请求 参数key value 需要编码后在拼接 2.get请求避免做数据提交,用post提交.jq,axios的post提交默认编码了不会有问 ...

  6. 解决url传递过程中加号变空格的问题

    url传递过程中加号变空格 在接收url参数的过程中,会发现如果参数中存在‘+’号,接收后会变成空格. 如11+22接收后变成11 22. 要解决这个问题,需要将加号替换为%2B进行传递. 如11%2 ...

  7. 解决url传递过程中加号变空格的问题<转>

    url传递过程中加号变空格在接收url参数的过程中,会发现如果参数中存在‘+’号,接收后会变成空格. 如11+22接收后变成11 22.要解决这个问题,需要将加号替换为%2B进行传递. 如11%2B2 ...

  8. Vin码识别(车架号识别)技术,摆脱手动录入提高工作效率

    本文主题:Vin码识别(车架号识别)技术,摆脱手动录入提高工作效率 本文关键词:Vin码识别,汽车Vin码识别,车架号识别,汽车车架号识别,车代码识别,车代号识别 本文主旨:一.Vin码(车架号)在什 ...

  9. LODOP直接用base64码输出图片

    Lodop中的ADD_PRINT_IMAGE,也可以直接输出base64码图片,不用加img标签,如果加了img标签,会被当做超文本对待,受浏览器引擎解析的影响. 什么时候使用base64码直接输出比 ...

随机推荐

  1. vue踩坑记- Cannot find module 'wrappy'

    找不到模块"包装" 当你维护别人的项目代码的时候,在自己这里电脑上运行,打开一个项目cnpm run dev的时候,报错如下 Cannot find module 'wrappy' ...

  2. STM32 之ADC单次转换模式和连续转换模式

    一.背景 在STM32中的AD的单通道采样中可以设置成单次转换模式和连续转换模式,如何理解这两个转换模式的区别,通过程序又是怎样实现的? 二.正文 首先理解单次转换模式,即ADC进行单次转换(单样本) ...

  3. SpringMVC 传递相同名称的参数的最佳方法

    华为云4核8G,高性能云服务器,免费试用 >>>   SpringMVC 多个对象的相同字段参数传递解决方案,在SpringMVC中,有时需要传递多个对象(除了Model和web元素 ...

  4. IDFA和IMEI

    这里有一些解释: https://www.zhihu.com/question/38856446

  5. 重排序列 & 拓扑排序

    http://bookshadow.com/weblog/2016/10/30/leetcode-sequence-reconstruction/ 这道题目,检查重排的序列是否一致. 用了拓扑排序. ...

  6. GraphX 图数据建模和存储

    背景 简单分析一下GraphX是怎么为图数据建模和存储的. 入口 能够看GraphLoader的函数. def edgeListFile( sc: SparkContext, path: String ...

  7. HTML实体与网页编码(汉字转化为了html实体) .

    http://blog.csdn.net/f438952359/article/details/7481267 HTML实体与网页编码(汉字转化为了html实体) . htmlencodingfunc ...

  8. 右键菜单添加Total Commander

    Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Folder\shell\OpeninTC]@="使用TotalCmd打开(& ...

  9. JS学习笔记 - fgm练习 2-12- 全选反选 判断CheckBox是否选中 &&运算符

    练习地址:http://www.fgm.cc/learn/lesson2/12.html 总结: 1.  && 运算符,从左向右依次执行,如果遇到 false,就不再继续执行后面的语句 ...

  10. C/S与B/S架构比较

    一C/S 1.C/S概念 C/S是Client/Server的缩写.服务器通常采用高性能的PC.工作站或小型机,并采用大型数据库系统,如Oracle.Sybase.Informix或 SQL Serv ...