node.js - 文件上传前生成目标路径 - multer

标签 node.js uuid multer

在将文件上传到其中之前尝试创建一个文件夹。但是,如果我在尝试再次下载文件时不更新 Node 上的服务器,则会出现问题,它会添加到已创建的文件夹中。如果我更新服务器,它会创建一个新文件夹并根据需要上传。请查看代码,我该如何改进它?

const db = require('../db');
const fs = require('fs');
const path = require('path');
const uuidv1 = require('uuid/v1');
const multer = require('multer');

console.log(uuidv1())
let storage = multer.diskStorage({
  destination: `./uploads/${uuidv1()}`,
  filename: (req, file, cb) => {
    cb(null, 'test1' + '-' + Date.now() + '.' + path.extname(file.originalname));
  }
});

let upload = multer({storage});

module.exports = (router) => {

  router.get('/get', (req, res) => {
    db.connect.query('SELECT * FROM habalka',
      {type: db.sequelize.QueryTypes.SELECT}
    ).then(result => {
      res.json(result);
    })
  });

  router.post('/post', upload.any(), (req, res) => {
    res.json('test');


  });

  return router;
};

最佳答案

您的问题当您启动您的应用程序时,它生成新的uuid(一次 - 在应用程序启动时)并作为字符串传递给diskStorage 方法。

但是您希望每次上传文件时都生成该路径。


解决方法如下:

Multer 具有动态生成 目标路径文件名功能

所以您必须传递一个函数,它将生成路径并在回调中返回它。

阅读后的例子this manual :

let storage = multer.diskStorage({

  // pass function that will generate destination path
  destination: (req, file, cb) => {

    // initial upload path
    let destination = path.join(__dirname, 'uploads'); // ./uploads/

    // if user logged in and You store user object in session
    if (req.session && req.session.user && req.session.user.id) {
      destination = path.join(destination, 'users', req.session.user.id, uuidv1()); // ./uploads/users/8/generated-uuid-here/
    }
    else {
      destination = path.join(destination, 'files', uuidv1()); // ./uploads/files/generated-uuid-here/
    }

    cb(
      null, 
      destination
    );
  },

  // pass function that may generate unique filename if needed
  filename: (req, file, cb) => {
    cb(
      null, 
      Date.now() + '.' + path.extname(file.originalname)
    );
  }

});

关于node.js - 文件上传前生成目标路径 - multer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53916462/

相关文章:

java - Hibernate UserType 和定义的长度

javascript - NodeJS - multer - 根据请求属性更改文件名

angularjs - 如何在循环后显示所有多数据数组并使用 ng-repeat 显示所有数据?

node.js - SequelizeJS : Best way to get min ID and max ID in a table

c++ - 构建 C++ COM 对象以生成 UUID

node.js - Amazon S3 存储桶文件上传响应不可用

javascript - 上传多个文件时处理 multer.single ('file' ) 错误

javascript - Express 生成器 - TypeError : app. set 不是一个函数

javascript - 如何使用 dotenv EJS 文件 - 可能吗?

c++ - 如何将字符串(字符数组)中的 UUID 转换为静态 uint8_t adv_data[31]