我有如下的二进制使用在Tomcat 8网络套接字服务器:网页套接字API - 图像编码产生在客户端没有图像类型
sess.getBasicRemote().sendBinary(bf);
其中Bf是字节转换一个简单的图像,如下所示:
BufferedImage img = ImageIO.read(...);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(img, "png", baos);
ByteBuffer bf = ByteBuffer.wrap(baos.toByteArray());
这段代码最终在客户端(JavaScript)中作为一个blob,并最终在浏览器中呈现为图像,这似乎工作得很好。 唯一奇怪的是,图像呈现无类型:
数据:; base64,iVBORw0KGgoAAAA ...... ==没有类型(image/png)。
如果我用网上的编码器对同一图像,我会得到:
数据:图像/ PNG; BASE64,iVBORw0KGgoAAAA ...... ==(注意,图像/ PNG型)
所以我的问题这是为什么? 是我的图像转换为字节错误?就像我说的那样,图像显示正常,它只是缺少类型。 请注意,从java websocket服务器发送的数据不是用base 64编码的,它是我在客户端执行的操作(通过JS的FileReader.readAsDataURL(blob) - 非常常见)。
非常感谢和很抱歉的帖子
嗨,谢谢你的精心和快速的回应。 blob出现在websocket的客户端,并检查这个blob没有媒体类型那里...所以我不能确定在客户端什么是媒体类型...我想我应该根本不使用二进制,我会用在java服务器端的json字符串,并添加一个类型属性加base64编码字节数组在另一个属性。这是我能想到的唯一解决方案。再次感谢! – user1061835
不客气,是的,这似乎是一种更好的方式,或者可以使用适当的媒体类型在服务器上创建数据URL字符串。 – 11thdimension