【问题标题】:NodeJS - reading Image Binary FileNodeJS - 读取图像二进制文件
【发布时间】:2016-10-20 13:48:15
【问题描述】:

我正在开发用于存储用户上传的文件的 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 的值时,它是字符串并且具有值:

我尝试像这样使用缓冲区写入文件

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 文件,但无法将它们作为图像读取。

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

【问题讨论】:

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


    【解决方案1】:

    这看起来像是流的一个很好的例子。

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

    【讨论】:

      猜你喜欢
      • 2013-12-22
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-30
      相关资源
      最近更新 更多