Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在文件上载之前生成目标路径-multer_Node.js_Uuid_Multer - Fatal编程技术网

Node.js 在文件上载之前生成目标路径-multer

Node.js 在文件上载之前生成目标路径-multer,node.js,uuid,multer,Node.js,Uuid,Multer,尝试在上载文件之前创建文件夹。但是,如果在再次尝试下载文件时不更新节点上的服务器,则会出现问题,该文件会添加到已创建的文件夹中。如果我更新服务器,它会创建一个新文件夹,并根据需要上传。请查看代码,我如何改进它 const db = require('../db'); const fs = require('fs'); const path = require('path'); const uuidv1 = require('uuid/v1'); const multer = require('m

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

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具有功能,可动态生成目标路径文件名

因此,您必须传递一个函数,该函数将生成路径,并在回调中返回它

阅读后的示例:


我的最终代码在这里,它可以工作!谢谢

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


console.log(uuidv1())

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/

    let id = uuidv1();
    shell.mkdir('-p', './uploads/' + id);
    destination = path.join(destination, '', id); // ./uploads/files/generated-uuid-here/
    console.log('dest', destination)

    cb(
      null,
      destination
    );
  },

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

});

var upload = multer({storage: 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;
};

嗨,希望一切都好。我有一个非常类似的问题,请你看看。
const db = require('../db');
const fs = require('fs');
const uuidv1 = require('uuid/v1');
const path = require('path');
const multer = require('multer');
const shell = require('shelljs');


console.log(uuidv1())

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/

    let id = uuidv1();
    shell.mkdir('-p', './uploads/' + id);
    destination = path.join(destination, '', id); // ./uploads/files/generated-uuid-here/
    console.log('dest', destination)

    cb(
      null,
      destination
    );
  },

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

});

var upload = multer({storage: 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;
};