无法在 multer 中更改目的地

Can't change destination in multer

当我上传我的表单(只包含一张图片)时,图片进入根文件夹,但我希望它进入 /public/images。我有一个单独的 routes.js 文件来处理路由。这就是我设置 multer 的方式(在我的 routes.js 文件中)。

var multer = require('multer');
    var upload = multer({dest: '/public'});

POST 请求的路由如下所示:

app.post('/upload', isLoggedIn, upload.single('file'), function (req, res) {
        var file = __dirname + req.file.filename;
        fs.rename(req.file.path, file, function (err) {
            if (err) {
                console.log(err);
                res.send(500);
            } else {
                res.json({
                    message: 'File uploaded successfully',
                    filename: req.file.filename
                });
            console.log(file);
            }
        });
    });

,表单本身看起来像这样(它是一个 ejs 文件):

<form method="post" action="/upload" enctype="multipart/form-data">
                    <label for="profilepicture">Profile picture</label>
                    <input type="file" name="file" accept="image/*">
                    <input type="submit" value="change profile picture">    
                    </form>

您在 dest 中提供了错误的路径,它是相对路径,因此应该是 dest: 'public/' 而不是 dest: '/public'

此外,您使用 fs.rename 将文件从 public 文件夹中移出,将文件移至根文件夹之外的原因是您在文件名中添加了根文件夹,而不是作为路径:

var file = __dirname + req.file.filename;

应该是:

var file = __dirname + '/' + req.file.filename;

甚至更好:

var file = path.join(__dirname, req.file.filename);

总的来说,一个不需要 fs.rename :

的工作脚本
var multer = require('multer');
var upload = multer({dest: 'public/'});

app.post('/upload', isLoggedIn, upload.single('file'), function (req, res) {
  res.json({
    message: 'File uploaded successfully',
    filename: req.file.filename
  })
})