无法在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中更改目的地的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 express 和 multer 运行 node.js 服务器以在节点中上传文件