我编写了一个必须将文件传输到REST Web服务的客户端。
我从输入控件中获取File对象,然后使用FileReader对象将其转换为base64(String)。我注意到base64字符串的重量是原始文件大小的30-40%。 如果我将二进制大小的字符串转换成字面上爆炸,那么如果有一种更有效的方法来转换字符串此文件并通过HTTP发送,我就会徘徊。
function toBase64() {
var file = document.querySelector('#base64').files[0];
var reader = new FileReader();
reader.addEventListener("load", function () {
var bin = base64toBin(reader.result);
var base64 = reader.result;
console.log(bin, base64);
});
if (file) {
reader.readAsDataURL(file);
}
}
function base64toBin(data) {
var binArray = []
var datEncode = "";
for (let i=0; i < data.length; i++) {
binArray.push(data[i].charCodeAt(0).toString(2));
}
for (let j=0; j < binArray.length; j++) {
var pad = padding_left(binArray[j], '0', 8);
datEncode += pad + ' ';
}
function padding_left(s, c, n) { if (! s || ! c || s.length >= n) {
return s;
}
var max = (n - s.length)/c.length;
for (var i = 0; i < max; i++) {
s = c + s; } return s;
}
return binArray;
}
这是一个poc: jsfiddle