簡體   English   中英

如何在通過multer上傳文件之前自動創建文件夾,以便這些文件存儲在nodejs中創建的文件夾中?

[英]How to create folder automatically before files upload via multer so that those files get stored in that created folder in nodejs?

這是我上傳多個文件的 multer 代碼。

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, './public/files/'+ req.user.id)
  },
  filename: function (req, file, cb) {
    x = file.originalname; //+path.extname(file.originalname);
  cb(null,x);
  }
});

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

這是在單擊提交時提交文件的發布請求。

router.post(upload.array("FileUpload",12), function(req, res, next) {

//Here accessing the body datas.

})

所以我想要的是,我想首先使用生成的ID的名稱創建一個folder ,可以從req.body訪問,然后將這些文件分別上傳到該文件夾​​中。 但是由於在上傳之前我無法先訪問body ,因此我無法創建相應的folder directory. 有沒有其他方法可以讓我想到並實現這一點?

使用 fs-extra 包更新了解決方案。

const multer = require('multer');
let fs = require('fs-extra');

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    let Id = req.body.id;
    fs.mkdirsSync('./public/files/'+ req.user.id + '/' + Id);
    cb(null, './public/files/'+ req.user.id + '/' + Id)
  },
  filename: function (req, file, cb) {
    x = file.originalname; //+path.extname(file.originalname);
  cb(null,x);
  }
});

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

這是在單擊提交時提交文件的發布請求。

router.post(upload.array("FileUpload",12), function(req, res, next) {

//Here accessing the body datas.

})

你必須先安裝fs-extra它將創建文件夾

為 multer 創建單獨的文件夾,如multerHelper.js

const multer = require('multer');
let fs = require('fs-extra');

let storage = multer.diskStorage({
destination: function (req, file, cb) {
    let Id = req.body.id;
    let path = `tmp/daily_gasoline_report/${Id}`;
    fs.mkdirsSync(path);
    cb(null, path);
},
filename: function (req, file, cb) {
    // console.log(file);

    let extArray = file.mimetype.split("/");
    let extension = extArray[extArray.length - 1];
    cb(null, file.fieldname + '-' + Date.now() + "." + extension);
 }
})

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

let createUserImage = upload.array('images', 100);

let multerHelper = {
    createUserImage,
}

module.exports = multerHelper;

在您的路線中導入 multerhelper 文件

const multerHelper = require("../helpers/multer_helper");

router.post(multerHelper , function(req, res, next) {

//Here accessing the body datas.

})

我遵循了您的代碼,但它在文件夾名稱中返回未定義。 你是怎么得到正確的身份證的? 謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM