我有一个图像字节数组,我需要使用HTTP客户端发送到服务器上的servlet。我们知道如何发送普通文本数据但无法发送图像数据。
我们使用以下代码从图像字节数组创建了一个字符串数据:
String imageData = new String(imagebyteArr);
并通过HTTP客户端将上述String
发送到servlet,但是当我们再次使用以下代码从字符串中检索字节数组时:
imageByteArr = imageData.toByteArray();
结果字节数组被修改为1,其中-127在63上被替换。
如何解决这种意外行为?
答案 0 :(得分:2)
字符串被编码。你有2个可能性:将二进制数据编码为base64(例如)发送base64并在服务器端解码或使用PUT请求进行二进制上传。
答案 1 :(得分:1)
我完全劝阻你采用图像字节数组并转换为String
,因为你将不得不担心字符编码。
要做的一件事是使用ByteArrayEntity
直接发送字节数组,如下所示:
HttpPost post = new HttpPost(url);
post.setEntity(new ByteArrayEntity(bytes));
post.setHeader("Content-type", ""application/octet-stream");
不要忘记将Content-Type
设置为正确的图像。