【问题标题】:Node/Multer Get FilenameNode/Multer 获取文件名
【发布时间】:2016-03-23 13:58:42
【问题描述】:

我正在使用以下内容通过 Multer 将文件上传到目录。它工作得很好,但我需要在上传后执行一些操作,这些操作需要我刚刚发布到“上传”目录的文件的名称。如何获取我刚刚发布的文件的名称?

// Multer storage options
var storage = multer.diskStorage({
  destination: function(req, file, cb) {
    cb(null, 'upload/');
  },
  filename: function(req, file, cb) {
    cb(null, file.originalname + '-' + Date.now() + '.pdf');
  }
});

var upload = multer({ storage: storage });

app.post('/multer', upload.single('file'), function(req, res) {
  // Need full filename created here
});

【问题讨论】:

标签: node.js multer


【解决方案1】:

request.file 提供以下统计信息,您只需从中选择 request.file.originalnamerequest.file.filename 即可获取 nodejs 应用程序创建的新文件名。

{ 
  fieldname: 'songUpload',
  originalname: '04. Stairway To Heaven - Led Zeppelin.mp3',
  encoding: '7bit',
  mimetype: 'audio/mp3',
  destination: './uploads',
  filename: 'songUpload-1476677312011',
  path: 'uploads/songUpload-1476677312011',
  size: 14058414 
}

例如,在 nodejs express mvc app 中使用 ecma-6,

var Express = require('express');
var app = Express();

var multipartUpload = Multer({storage: Multer.diskStorage({
    destination: function (req, file, callback) { callback(null, './uploads');},
    filename: function (req, file, callback) { callback(null, file.fieldname + '-' + Date.now());}})
}).single('songUpload');

app.post('/artists', multipartUpload, (req, resp) => {
     val originalFileName = req.file.originalname
     console.log(originalFileName)
}
【解决方案2】:

使用 request.file.filename

fieldname 表单中指定的字段名称
originalname 用户计算机上文件的名称 encoding 文件的编码类型
mimetype 文件的 Mime 类型
size 文件的大小(以字节为单位)

【讨论】:

    【解决方案3】:

    在 Multer 中访问上传的文件数据会有所不同,具体取决于您是上传单个还是多个文件。像这样访问数据:

    上传单个文件:

    req.file
    

    上传多个文件:

    req.files
    

    【讨论】:

    • req.filesmulter.any()。完美。
    【解决方案4】:
    var express=require("express");
    var app=express();
    var multer=require("multer");
    var upload=multer({dest:"uploads/"});
    app.post("/multer", upload.single("file"), function(req,res){
        console.log(req.file.filename);
    });

    【讨论】:

    • 应该是公认的答案。用户想要获得生成的文件名而不是原始文件名。谢谢!
    【解决方案5】:
        app.post('/multer', upload.single('file'), function(req, res) {
      // Need full filename created here
    const file = req.file
    if (!file) {
        const error = new Error('Please upload a file')
        error.httpStatusCode = 400
        return next(error)
      }
     res.send(file) #Here
    });
    

    您需要从此行恢复文件

     res.send(file)
    

    使用文件.文件名 这个输出样本

    {
      "fieldname": "myFile",
      "originalname": "isc te esta esperando.jpg",
      "encoding": "7bit",
      "mimetype": "image/jpeg",
      "destination": "uploads",
      "filename": "myFile-1602293858948.eaf",
      "path": "uploads/myFile-1602293858948.eaf",
      "size": 297720
    } 
    

    【讨论】:

      【解决方案6】:

      我在github上找到了答案,你可以在 res.req.file.filename 更多信息请参见https://github.com/expressjs/multer/issues/302

      【讨论】:

        猜你喜欢
        • 2019-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-01
        • 2018-03-31
        • 1970-01-01
        • 1970-01-01
        • 2019-02-06
        相关资源
        最近更新 更多