原生node.js捕获图片的数据流,拿到数据,图片存不起来?
发布于 6 年前 作者 leChengWebDev 2950 次浏览 来自 问答

相关代码如下

// 上传图片
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>");
}

相关图片如下

图片上传payload.png

曾参考文章

4 回复

尝试用非同期处理怎么样?

fs.writeFile(path, nbuf , (err) => { if(err){ console.log(“error:” + err) throw err } else{ console.log(“foo”) } });

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编码已经被弃用了 老哥

回到顶部