导读:
我们有一个项目客户端上传图片,先请求接口把图片上传到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;
}