本文主要在后端接收前端给的FormData数据,前端的上传篇,查看对应的上传篇
如果你想马上使用,那么你可以去npm中使用multer或者formidable可以快速的解决你的问题,这里不使用包,完成下载的功能
首先需要知道FormData传过来的数据长什么样子,这个非常重要,如果这里有疑问,你可以查看对应的上传篇
进入主题,直接给出代码,需要引入fs和async包
app.post("/imageUpload", function(req, res, next) {
//这里req的编码方式为二进制
req.setEncoding('binary');
var body = "";
var boundary = req.headers['content-type'].split('; ')[1].replace('boundary=', '');
req.on('data', function(chunk) {
body += chunk;
});
req.on("end", function(req, res, next) {
var that = this;
var file = body.split("--" + boundary);
//取数据
var i = 1;
async.eachSeries(file, function(current, callback) {
if (i < file.length - 1) {
var something = querystring.parse(file[i], "\r\n", ": ");
if (something['Content-Type']) {
//如果这里上传的是文件
//这里先测试图片
// 获取图片类型(如:image/gif 或 image/png))
var entireData = body.toString();
const fileName = something['Content-Disposition'].split('filename=')[1].replace(/"/g, '').trim();
var contentTypeRegex = /Content-Type: image\/.*/;
const contentType = something['Content-Type'];
//获取文件二进制数据开始位置,即contentType的结尾
var upperBoundary = entireData.indexOf(contentType) + contentType.length;
var shorterData = entireData.substring(upperBoundary);
// 替换开始位置的空格和结尾的空格
var binaryDataAlmost = shorterData.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
// 去除数据末尾的额外数据,即: "--"+ boundary + "--"
var binaryData = binaryDataAlmost.substring(0, binaryDataAlmost.indexOf('--' + boundary + '--'));
// 保存文件
fs.writeFile(fileName, binaryData, 'binary', function(err) {
console.log('图片上传完成');
});
} else {
//如果这里上传的不是文件
var dataArray = file[i].split("name=")[1].replace(/"/g, '').split("\r\n");
that.body[dataArray[0]] = dataArray[2]
}
i++;
}
callback(null);
}, function(err) {
console.log("req.body", that.body);
})
})
res.end("over!!over!!")
})
至此下载篇完结,