Node.js HTTP服务器中的文件、图片上传的方法

2020-06-17 05:31:18易采站长站整理

for (value in fileInfo){
if (fileInfo[value].indexOf("filename=") != -1){
fileName = fileInfo[value].substring(10, fileInfo[value].length-1);

if (fileName.indexOf('') != -1){
fileName = fileName.substring(fileName.lastIndexOf('')+1);
}
console.log("文件名: " + fileName);
}
}

// 获取图片类型(如:image/gif 或 image/png))
var entireData = body.toString();
var contentTypeRegex = /Content-Type: image/.*/;

contentType = file['Content-Type'].substring(1);

//获取文件二进制数据开始位置,即contentType的结尾
var upperBoundary = entireData.indexOf(contentType) + contentType.length;
var shorterData = entireData.substring(upperBoundary);

// 替换开始位置的空格
var binaryDataAlmost = shorterData.replace(/^ss*/, '').replace(/ss*$/, '');

// 去除数据末尾的额外数据,即: "--"+ boundary + "--"
var binaryData = binaryDataAlmost.substring(0, binaryDataAlmost.indexOf('--'+boundary+'--'));

// 保存文件
fs.writeFile(fileName, binaryData, 'binary', function(err) {
res.end('图片上传完成');
});
} else {
res.end('只能上传图片文件');
}
});
}

req是一个IncomingMessage对象,而该对象又实现了ReadableStream,所以我们可以用流的方式来接收数据。数据接收完成了,按rfc1867规范进行了数据处理,并通过fs模块保存了文件。