node中转图片上传

来源:互联网 发布:linux kernel init 编辑:程序博客网 时间:2024/04/29 22:54

导读:

我们有一个项目客户端上传图片,先请求接口把图片上传到node js写的api接口后,经过简单的逻辑处理后,在调用后端的.net接口保存图片,由于node端不需要处理图片,我在想能不能直接把客户端上传的图片流直接传给后端呢?

代码如下:

node端程序
var imgData = req.body.file; //客户端后去到上传的图片信息 这个地方时base64的字符串  if (!imgData) {    return res.error('请上传图片');  }  // 过滤需要base64图片的头去掉  var base64Data = imgData.replace(/^data:image\/\w+;base64,/, '');  //然后存储到js buffer中  var dataBuffer = new Buffer(base64Data, 'base64');  // 通过form-data构造请求参数  var data = new formData();  data.append('file', dataBuffer, {    filename: Date.parse(new Date()) + '.jpg', //指定图片的名称    contentType: 'image/jpg', //图片类型,我这个地方写死了,可以从图片信息中拿到    knownLength: dataBuffer.length //buffer长度  });//然后向后端发出请求,上传图片fetch(url, {method: 'post', body: data, headers: data.getHeaders()})      .then(function (res) {        return res.json();      }).then(function (body) {        return callback(body);      }).catch(function (err) {        return callback(err);      });

注:需要引用两个模块

 import formData from 'form-data'; import fetch from 'node-fetch';
.net端程序
var action = new ContentResult() { Content = "OK" };            try            {                var files = Request.Files;                foreach (var key in files.AllKeys)                {                    var file = files[key];                    var basePath =   HttpContext.Server.MapPath("~/upload/");                    var fileName = DateTime.Now.ToFileTime().ToString();                    var filePath = string.Format(@"{0}\{1}", basePath, file.FileName);                    file.SaveAs(filePath);                }            }            catch (Exception ex)            {                action.Content = "error";                return action;            }
0 0