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