当我上传我的表单(只包含图像)时,图像会进入根文件夹,但我希望它转到/ 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>
答案 0 :(得分:2)
您在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
})
})