无法在multer中更改目的地

Posted

技术标签:

【中文标题】无法在multer中更改目的地【英文标题】:Can't change destination in multer 【发布时间】:2018-03-11 18:57:10 【问题描述】:

当我上传我的表单(其中只包含一张图片)时,图片进入根文件夹,但我希望它进入 /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>

【问题讨论】:

【参考方案1】:

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

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

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
  )
)

【讨论】:

以上是关于无法在multer中更改目的地的主要内容,如果未能解决你的问题,请参考以下文章

Multer模块将无法启动

无法使用 express 和 multer 运行 node.js 服务器以在节点中上传文件

无法使用 NestJs 和 Multer 上传文件

Nextjs - multer - TypeError:无法读取未定义的属性“传输编码”

无法让 multer filefilter 错误处理工作

我无法将文件上传到我使用 node js multer 指定的目录