【问题标题】:Change destination of uploaded file with Multer使用 Multer 更改上传文件的目的地
【发布时间】:2016-06-29 11:56:22
【问题描述】:

我正在使用 Multer 上传一些文件,我想根据上传文件的用户将文件上传到不同的文件夹。

这是我的代码:

server.js

app.use('/', require('./routes'));
app.use(express.static('public'));

routes/index.js

var teacher = require('./teachers.js');

router.post('/teachers/{id}/upload', teacher.uploadAvatar);

routes/teachers.js

var multer      = require('multer');
var upload      = multer({ dest: 'public/uploads/teacher/' }).single('avatar');

uploadAvatar: function(req, res) {
    upload(req, res, function(err) {
        console.log(req.body);
        console.log(req.file);

        if(err) {
            return res.end("Error uploading file.");
        }
        res.end("File is uploaded");
    });
}

文件上传非常好,但我想为每个用户创建单独的文件夹。文件夹名称应为用户 ID。我可以像这样访问用户的 ID:

teacherId: req.params.id

理想情况下,我还计划重命名上传的文件。

【问题讨论】:

    标签: javascript node.js multer


    【解决方案1】:

    您可以使用快速路由器,并在每个路由中初始化新的上传实例并将其用作中间件,例如:

    const createPost = require('./routes/createPost');
    
    app.use('/create-post', createPost);
    

    然后在 routes/createPost.js 中:

    const express = require('express');
    const router = express.Router();
    const multer = require('multer');
    
    const upload = multer({ dest: 'uploads/new_destination' });
    
    router.post('/', upload.single('imageToPost'), async(req, res) => {
        res.sendStatus(201);
    });
    
    module.exports = router;
    

    【讨论】:

      【解决方案2】:

      据我所知,您无法动态更改目的地。您可以在文件更新后移动它们。请在github中找到以下问题和答案,

      https://github.com/expressjs/multer/issues/39

      【讨论】:

        【解决方案3】:
        var multer  = require('multer')
        var mkdirp = require('mkdirp');
        uploadAvatar: function(req, res) {
        
        mkdirp('public/uploads/' + req.params.id , function(err) { 
        var upload      = multer({ dest: 'public/uploads/' + req.params.id }).single('avatar');
        upload(req, res, function(err) {
            console.log(req.body);
            console.log(req.file);
        
            if(err) {
                return res.end("Error uploading file.");
            }
            res.end("File is uploaded");
        });
        
        });
        }
        

        应该可以的

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-07-31
          • 2020-12-31
          • 1970-01-01
          • 2018-03-11
          • 1970-01-01
          • 2016-03-09
          • 2018-07-21
          相关资源
          最近更新 更多