在NodeJS中从上传的文件读取缓冲数据

3

我正在使用 'express' 模块上传文件。我需要使用 node-exif 读取所上传图像的 EXIF 数据。我不想将文件存储在磁盘上,而上述模块支持从缓冲区读取 EXIF 数据。我需要读取所上传图像的缓冲区数据。以下是上传代码:

var express = require('express');
var app = express();
var fs = require('fs');
var multiparty = require("multiparty");

module.exports.UploadImage = function (req, res, next) {
    // Handle request as multipart  
    if (!req.files)
        return res.status(400).send('No files were uploaded.');  

    var sampleFile = req.files.uploadedFile;
    //Here I need to have the buffer.
    res.send('Done!');
}

有人能帮助我获取缓冲数据吗?因为我对Node非常陌生。


你打算如何在不将文件存储到磁盘的情况下使用node-exif?它似乎只提供了从磁盘上的文件处理exif的能力... - Michael
2个回答

3

以下是获取缓冲区的方法:

var express = require("express");
const fileUpload = require('express-fileupload');
var app = express();
app.use(fileUpload());

app.post("/upload", (req, res) => {

   console.log(req.files.file);

   res.status(200).send('Success!!!');
});

控制台输出:

{
  name: 'task.txt',
  data: <Buffer ef bb bf 37 38 37 39 34 38 36 34 0d 0a 37 38 37 39 ... 57 more bytes>,
  size: 107,
  encoding: '7bit',
  tempFilePath: '',
  truncated: false,
  mimetype: 'text/plain',
  md5: '6e37e5195b2acfcac7713952ba080095',
  mv: [Function: mv]
}

data参数是你所需的内容。你可以按照以下方式将缓冲区解析为字符串:

   console.log(req.files.file.data.toString('utf8'));

0

我想这就是你要找的东西。

  module.exports.UploadImage = function (req, res, next) {
    // Handle request as multipart  
    if (!req.files)
        return res.status(400).send('No files were uploaded.');  

    var sampleFile = req.files.uploadedFile;
    //Here I need to have the buffer.
    var chunks = []
    req.on('data', function (chunk) {
        // reads chunks of data in Buffer
        console.log(chunk) // Prints <Buffer 8a 83 ef ... >
        chunks.push(chunk)
    })

    res.send('Done!');
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接