我目前正在开发一个显示 C++ 服务器发送的图像的 WebSocket 应用程序。我在那里看到了几个主题,但我似乎无法摆脱 Firefox 中的这个错误:
图像损坏或截断:data:image/png;base64,[some data]
这是我用来显示我的 blob 的 Javascript 代码:
socket.onmessage = function(msg) {
var blob = msg.data;
var reader = new FileReader();
reader.onloadend = function() {
var string = reader.result;
var buffer = Base64.encode(string);
var data = "data:image/png;base64,"+buffer;
var image = document.getElementById('image');
image.src = data;
};
reader.readAsBinaryString(blob);
}
我正在使用我在这个主题上找到的红点图像: https ://stackoverflow.com/a/4478878/1464608 Base64 类来自这里: https ://stackoverflow.com/a/246813/ 1464608
但是我得到的 base64 结果不匹配,Firefox 检索到图像被损坏的错误。
我知道这不是很多信息,但我不知道在哪里看:/任何帮助都非常受欢迎!!
原文由 guitio2002 发布,翻译遵循 CC BY-SA 4.0 许可协议
我认为最干净的解决方案是更改 base64 编码器以直接在 Uint8Array 而不是字符串上运行。
重要提示:为此,您需要将 Web 套接字的 binaryType 设置为“arraybuffer”。
onmessage 方法应该如下所示:
转换后的编码器应如下所示(基于 https://stackoverflow.com/a/246813/1464608 ):