本文主要在后端接收前端给的FormData数据,前端的上传篇,查看对应的上传篇前端
若是你想立刻使用,那么你能够去npm中使用multer或者formidable能够快速的解决你的问题,这里不使用包,完成下载的功能npm
首先须要知道FormData传过来的数据长什么样子,这个很是重要,若是这里有疑问,你能够查看对应的上传篇后端
进入主题,直接给出代码,须要引入fs和async包app
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!!") })
至此下载篇完结,async