NodeJS - 读取图像二进制文件

时间:2016-10-20 13:48:16

标签: node.js stream binaryfiles postman binary-data

我正在使用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')时出错。 来自邮递员的数据 enter image description here enter image description here

当我使用console.log(" message:" + req.body)打印出req.body的值时,它是字符串并且具有值: enter image description here

我尝试使用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文件,但无法将其作为图像读取。

如何从用户存储此图像? 非常感谢你。

1 个答案:

答案 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'})