思路很简单
controller接收Base64编码,将其转换成字节数组,再以流的形式生成图片。
我本地测试成功,可以形成图片,放到服务器上之后图片生成有问题。
经测试是因为传过来的参数有问题。
应为:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAYCAYAAABjswTDAAANB0lEQVRYRx2WeZDb9XnGPz/d97nSStrV3pf3ss3iE5+LjbGpgWIwaVpCAm0CtCTTa9okbafTyR+ZdKbTNMlMShImx7gYMMYYA6VgjA/w+lzvrb1XXkkrabW67+vXQX+9/3xnvvM+7/N+。。。。
结果为:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAYCAYAAABjswTDAAANB0lEQVRYRx2WeZDb9XnGPz/d97nSStrV3pf3ss3iE5 LjbGpgWIwaVpCAm0CtCTTa9okbafTyR ZdKbTNMlMShImx7gYMMYYA6VgjA/w lzvrb1XXkkrabW67 vXQX 9/3xnvvM 7/N 。。。。
加号都没了
应该怎样接收参数才能避免这个情况呢?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
先解决你的问题,将入参中的“+”用%2B代替
有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。
编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。
+ : URL 中+号表示空格,对应编码:%2B
空格 :URL中的空格可以用+号或者编码表示,对应编码:%20
/ :分隔目录和子目录,对应编码:%2F
?:分隔实际的URL和参数,对应编码:%3F
%:指定特殊字符,对应编码:%25
#:表示书签,对应编码:%23
&:URL 中指定的参数间的分隔符,对应编码:%26
=:URL 中指定参数的值,对应编码:%3D
对加号进行encode,详情参照这里 URL中带加号的处理
前端发送之前对加号做encode处理,正常如果是jQuery之类的应该会自动处理吧?
Base64编码太长了吧,用JQuery2吧,哈哈
导致这个问题是因为在URL里 参数字符"+"其实表示的是空格,另外还要注意一些其他特殊字符,也会出现类似的情况;
建议将需要传递的参数使用encodeURIComponent方法进行重新编码,让后后台接收到参数之后再进行解码
另外给一个解码的方法