JavaEE post Base64的图片丢失数据解决

项目中有个提交Base64编码的图片到服务器,服务器端转换成图片的二进制流存放到数据库中。在实际使用中发现,保存到数据库中图片文件有损坏。表现为前一部分二进制数据相同,到了后面就开始不同了。

一开始的步骤为:

st=>start: 准备Base64数据
op1=>operation: Post准备好的Base64数据
op2=>operation: 将数据并转换为byte[]
op3=>operation: 存储到数据库
e=>end

st->op1->op2->op3->end

为了找出问题,将post这个步骤省去,并将数据直接存成图片以便观察

st=>start: 准备Base64数据
op2=>operation: 将数据并转换为byte[]
op3=>operation: 存储成图片
e=>end

st->op2->op3->end

这一步保存的文件的大小是9.0k

st=>start: 准备Base64数据
op1=>operation: Post准备好的Base64数据
op2=>operation: 将数据并转换为byte[]
op3=>operation: 存储成图片
e=>end

st->op1->op2->op3->end

这一步保存的文件的大小是8.9k

上面两步对比可以说明数据在传输的时候出现了丢失的情况,于是我猜测是不是tomcat对post方式做了限制,发现不是。查询资料发现,Base64位数据传输的时候中间的+号容易发生丢失。解决方法是将post过来的数据先UrlEncode一下即可

发生这个问题的没有找到明确的可靠的解释,其中一片文章解释为javascript将+当做字符串连接符号处理导致丢失。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据