原生node.js捕获图片的数据流,拿到数据,图片存不起来?
相关代码如下
// 上传图片
function upLoadImg(response, pathname, POST) {
var POST = Buffer.from(POST);
var rems = [];
//根据\r\n分离数据和报头
for (var i = 0; i < POST.length; i++) {
var v = POST[i];
var v2 = POST[i + 1];
if (v == 13 && v2 == 10) {
rems.push(i);
}
}
//图片信息
var picmsg_1 = POST.slice(rems[0] + 2, rems[3]).toString();
var filename = picmsg_1.match(/filename=".*"/g)[0].split('"')[1];
//图片数据
var nbuf = POST.slice(rems[3] + 2, rems[rems.length - 2]);
var path = "./views/" + filename;
fs.writeFileSync(path, nbuf);
response.writeHead(200, { "Content-Type": "text/html;charset=utf-8" });
response.end('<div id="path">' + path + "</div>");
}
相关图片如下
曾参考文章
4 回复
尝试用非同期处理怎么样?
fs.writeFile(path, nbuf , (err) => { if(err){ console.log(“error:” + err) throw err } else{ console.log(“foo”) } });
@SteelRyo 不行的哦
1,设置req的编码为’binary’ 2,根据’\r\n’获取到一个对象(可以拿到文件名和文件类型,boundary边界符) { ’------WebKitFormBoundary88XwHgasDcLYUbn8’: ‘’, ‘Content-Disposition’: ’ form-data; name=“files”; filename=“avatar.jpg”’, ‘Content-Type’: ’ image/jpeg’, … } 3,获取二进制数据也就是"Content-Type: image/jpeg"后面的部分 4,记得去除boundary的尾巴(boundary边界符),也就是------WebKitFormBoundary…这一串,最后去除前后空格就可以保存了
@monsal binary编码已经被弃用了 老哥