如何通过multer按日期将文件上传到文件夹

问题描述 投票:0回答:1

所以我想按日期对图像进行排序,为此,我想像这样自动为每天创建一个文件夹:

var fs = require('fs');

router.post('/add/image',function (req, res, next) {
    // check if folder exist or not; if not, create one

    var dir = './uploads/gallery/'+ the date the file is uploading;

    if (!fs.existsSync(dir)){
      fs.mkdirSync(dir); // create a new folder
    }

    // then here I want to upload the image to the server to the folder i just created
    var upload = multer().single('avatar');
    upload(req, res, function (err) {


    })

    and then save in database

    let image = new Images();
    image.path = req.file.path;
    image.text = req.body.text;

    image.save(function (err) {
      if (err) {
        throw err;
      } else {
        req.flash('success', 'Image added');
        res.redirect('/media/gallery/image');
      }
    });
});

我该怎么做?

javascript node.js path fs multer
1个回答
0
投票

Multer具有一项功能,您可以将内存中的上载文件作为缓冲区,并随便使用它。

文档(强烈推荐您阅读了此内容):https://www.npmjs.com/package/multer#memorystorage

我已经基于此修改了您发布的代码(虽然我没有运行它,但我可以看到您已经发布了伪代码行,例如您在其中定义目录路径的位置)。上传;我假设您正在使用的代码中不存在不相关的错误):

var fs = require('fs');
const multer = require('multer');


//prepare multer for memory storage
const multerMemoryStorage = multer.memoryStorage();
const uploadToMemory = multer({
    storage: multerMemoryStorage
})

router.post('/add/image',function (req, res, next) {
    // check if folder exist or not; if not, create one

    var dir = './uploads/gallery/'+ the date the file is uploading;

    if (!fs.existsSync(dir)){
      fs.mkdirSync(dir); // create a new folder
    }

    // then here I want to upload the image to the server to the folder i just created
    var upload = uploadToMemory.single('avatar');
    upload(req, res, function (err) {
        if(err){
            console.error(`SOME ERROR IN UPLOADING FILE: ${e.message}`);
        } else {
            const filename = `myNewImg-${Date.now().toString()}.jpg`; //just adding an epoch at the end of the filename to make it unique
            //for single upload, you will get the buffer in req.file.buffer
            fs.writeFileSync(`${dir}/${filename}`,req.file.buffer);
        }

    })

    and then save in database

    let image = new Images();
    image.path = req.file.path;
    image.text = req.body.text;

    image.save(function (err) {
      if (err) {
        throw err;
      } else {
        req.flash('success', 'Image added');
        res.redirect('/media/gallery/image');
      }
    });
});

注意,如果文件很大,这可能是[[not]的理想解决方案,因为整个文件在写入之前就已加载到内存中,并且服务器将需要有大量可用内存来处理那些文件。

让我知道您是否对此解决方案有任何疑问。
© www.soinside.com 2019 - 2024. All rights reserved.