我正在使用API来存储用户上传的文件。
function uploadPhoto(req, res) {
var imagedata = new Buffer('');
req.body.on('data', function (chunk) {
imagedata = Buffer.concat([imagedata, chunk]);
});
req.body.on('end', function (chunk) {
fs.writeFile('success.jpeg', imagedata, 'binary', function (err) {
if (err) throw err
console.log('File saved.')
})
});
}
当我使用req.body.on(' data')时出错。 来自邮递员的数据
当我使用console.log(" message:" + req.body)打印出req.body的值时,它是字符串并且具有值:
我尝试使用Buffer这样写入文件
var writeFile = function (type, cb) {
var data = new Buffer(req.body, type);
fs.writeFile(type + '.jpeg', data, type, function (err) {
cb(null, data.length);
});
}
async.parallel([
writeFile.bind(null, 'binary'),
writeFile.bind(null, 'utf8'),
writeFile.bind(null, 'ascii'),
writeFile.bind(null, 'ucs2'),
writeFile.bind(null, 'base64')
], function (err, results) {
response.status(200).send({});
})
这将创建一些不同大小的jpeg文件,但无法将其作为图像读取。
如何从用户存储此图像? 非常感谢你。
答案 0 :(得分:0)
这看起来像流的好例子。
function uploadPhoto(req, res) {
var file = fs.createWriteStream(__dirname + '/success.jpeg')
req.pipe(file).on('error', function(err) { console.log(err) })
}
标题还可以帮助确定它具有的文件类型和字符编码。
var file = fs.createWriteStream(__dirname + '/success.jpeg', {defaultEncoding: req.headers.encoding || 'utf8'})