http不使用Form表單發送文件數據和非文件數據(下載篇)

本文主要在後端接收前端給的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

相關文章
相關標籤/搜索