我正在尝试找到一种方法来减少我发送到服务器的BASE64编码图像的大小。我发现question建议使用LZMA解决方案。但是当我检查服务器上的请求大小时,我发现未压缩版本的大小要小10倍。我错过了一步吗?我看到压缩的结果是Byte Array
我尝试使用.toString('utf8')
方法,但它似乎只是加入数组。
/* LZMA COMPRESS / DECOMPRESS */
.factory('ooLZMA', ['CONFIG', function (CONFIG) {
return {
compress: function (string) {
return LZMA.compress(string, CONFIG.stringCompression);
},
decompress: function () {
return LZMA.decompress(string);
}
}
}])
在服务器上:
console.log('size', req.headers['content-length'] / 1048576, 'comp', req.body.compressed);
//"compressed"
size 0.1276998519897461 comp true
//raw BASE64
size 0.01657390594482422 comp false
答案 0 :(得分:2)
这是由于格式转换。 如果您发送BASE64编码,它已经是一个字符串,它将原样发送到服务器。 而是在实际请求之前将数组转换为字符串。 如果您的数据压缩得太多,压缩的数据将具有相似的大小,但字符串转换操作会增加它,因为每个数字平均在10/12个字符长。
如果您使用的是jquery,我认为这是发布数据的正确方法。
Sending binary data in javascript over HTTP
通过设置实际内容类型'application / octet-stream'并避免预处理/转换。