我试图从缓冲的字节数组创建一个图像。这是因为我使用json将图像从服务器发送到客户端。这是代码:
客户端用index.html文件表示。
// index.html
<img id="ItemPreview">
<script>
var socket = new WebSocket("ws://localhost:8080");
socket.onopen = function(event){
setTimeout(function(){
var message = JSON.stringify({"task" : "initialize", "data" : ""});
socket.send(message);
}, 1000);
};
socket.onmessage = function(event){
var json = JSON.parse(event.data);
if(json.task == "display-image"){
console.log("From Client\t\t: " + json);
console.log(json.data.data);
var urlCreator = window.URL || window.webkitURL;
//var imageUrl = urlCreator.createObjectURL(json.data);
var imageUrl = urlCreator.createObjectURL(new Blob(json.data.data));
document.querySelector("#ItemPreview").src = imageUrl;
//document.querySelector("#ItemPreview").src = "data:image/png;base64," + json.data.data;
var message = JSON.stringify({ "task" : "get-image", "data" : ""});
socket.send(message);
}
};
</script>
我也尝试了评论中的内容,但无法实现...
服务器用index.js文件表示。
// index.js
var server = require('ws').Server;
var s = new server({ port : 8080 });
var fs = require('fs');
s.on('connection', function(ws){
ws.on('message', function(message){
var json = JSON.parse(message);
console.log("From Server:\t\t" + json);
if(json.task == "initialize"){
var image = fs.readFileSync("./img/1.jpg");
var messageToSend = JSON.stringify({
"task" : "display-image",
"data" : image
});
ws.send(messageToSend);
}
});
ws.on('close', function(){
console.log("I lost a client");
});
});
这只是一个简单的问题,但我已经在论坛中搜索,但无法解决我的问题。如果有人可以帮助我,我会很感激,谢谢!
答案 0 :(得分:0)
这将有效:
function _arrayBufferToBase64(buffer) {
var binary = '';
var bytes = new Uint8Array(buffer);
var len = bytes.byteLength;
for (var i = 0; i < len; i++) {
binary += String.fromCharCode(bytes[i]);
}
return window.btoa(binary);
}
socket.onmessage = function (event) {
var json = JSON.parse(event.data);
if (json.task == "display-image") {
var imageUrl = _arrayBufferToBase64(json.data.data);
document.querySelector("#ItemPreview").src = "data:image/png;base64," + imageUrl;
var message = JSON.stringify({"task": "get-image", "data": ""});
socket.send(message);
}
};