节点/快速上传多个文件

时间:2018-07-18 15:20:47

标签: node.js express

我有下面的节点/表达代码,它们将文件粘贴到我的端点//并将其存储在OS上。我在Node上比较陌生,发贴时看到这段代码正在创建两个文件。一个带有原始文件名,另一个带有似乎是uuid的文件名。在我的代码中,它使它创建两个文件而不是仅发布一个文件是什么?

const multer = require('multer')
const fs = require('fs')
const shell = require('shelljs')
const app = require('express')

const upload = multer({ dest: './upload' });

app.post('/upload', upload.single('file'), function(req, res) {

  const tmp_path = req.file.path;

  const target_path = './upload/' + req.file.originalname;

  const src = fs.createReadStream(tmp_path);
  const dest = fs.createWriteStream(target_path);
  src.pipe(dest);
});

2 个答案:

答案 0 :(得分:0)

您正在使用multer中间件并为其指定目标目录,因此它将在此处创建文件。然后,您将创建自己的WriteStream并再次写入。

答案 1 :(得分:0)

因为您上传了两次。一次在中间件中,一次在代码中。

为解决此问题,我的建议是将整个上传过程转移到路由之外:

var storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, "uploads/")
        // you need to create uploads folder before than running the code
    },
    filename: function (req, file, cb) {
        var originalname = file.originalname
        var extension = originalname.split(".")
        filename =
            // you can edit here to build any custom name
            file.originalname +
            extension[extension.length - 1]
        cb(null, filename)
    }
})

var upload = multer({storage: storage})

var avatarFileUpload = upload.single('file')

然后在路由中使用 avatarFileUpload 中间件