Как можно отправить файл через websocket json полем? Когда делаю так, ws крашится:
$("#sendBtn").click(function () {
var file = $("#preview_img")[0].files[0];
var reader = new FileReader();
reader.onloadend = function (event) {
var buffer = event.target.result;
w.send(JSON.stringify({
title: articleTitle.val().toString(),
content: CKEDITOR.instances['editor'].getData(),
preview_img: buffer,
img_name: file.name
}));
console.log(reader.error)
};
reader.readAsBinaryString(file);
});
вот так работает, но только для файлов от 1кб и меньше, как можно исправить?
function ArrayBufferToBase64(buff) {
var alph = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
enc = "",
n, p, bits;
d = new Uint8Array(buff);
var len = buff.byteLength * 8;
for (var offset = 0; offset < len; offset += 6) {
n = (offset / 8) | 0;
p = offset % 8;
bits = ((d[n] || 0) << p) >> 2;
if (p > 2) {
bits |= (d[n + 1] || 0) >> (10 - p)
}
enc += alph.charAt(bits & 63);
}
enc += (p == 4) ? '=' : (p == 6) ? '==' : '';
return enc;
}
$("#sendBtn").click(function () {
var file = $("#preview_img")[0].files[0];
var reader = new FileReader();
reader.onloadend = function (event) {
var buffer = ArrayBufferToBase64(event.target.result);
console.log(buffer)
w.send(JSON.stringify({
title: articleTitle.val().toString(),
content: CKEDITOR.instances['editor'].getData(),
preview_img: buffer,
img_name: file.name
}));
};
reader.readAsArrayBuffer(file);
});