我是Node.js的新手,最近遇到了一个简单的问题。
我使用multer
模块上传图片。在我的Web应用程序中,所有用户都有一个唯一的ID,我希望上传的图像存储在一个目录中,并根据他们的ID命名。
示例:
.public/uploads/3454367856437534
下面是我的routes.js
文件的一部分:
// load multer to handle image uploads
var multer = require('multer');
var saveDir = multer({
dest: './public/uploads/' + req.user._id, //error, we can not access this id from here
onFileUploadStart: function (file) {
return utils.validateImage(file); //validates the image file type
}
});
module.exports = function(app, passport) {
app.post('/', saveDir, function(req, res) {
id : req.user._id, //here i can access the user id
});
});
}
如何访问回调function(req, res)
之外的req.user._id
属性,以便与multer
一起使用,从而根据id生成正确的目录?
编辑以下是我尝试过但没有成功的:
module.exports = function(app, passport) {
app.post('/', function(req, res) {
app.use(multer({
dest: './public/uploads/' + req.user._id
}));
});
}
4条答案
按热度按时间h6my8fg21#
更新
自从我发布了最初的答案以来,很多事情都发生了变化。
关于
multer 1.2.1
1.您需要使用
DiskStorage
来指定存储文件的 where 和 how。1.默认情况下,multer将使用操作系统的默认目录。在我们的情况下,因为我们对位置很挑剔。我们需要确保文件夹存在,然后才能将文件保存到那里。
注意:当提供destination作为函数时,您负责创建目录。
更多
fs-extra
用于创建目录,以防目录不存在原始答案
您可以使用changeDest
函数重命名要放置上载文件的目录。
从v0.1.8开始提供
2w3kk1z52#
你可以解决这个问题,只要参考输入名称,并在分配之前重命名路径。
uurity8g3#
你可以使用multer来处理上传目录的动态创建。在发送文件名之前,应调用输入参数(您要为其创建目录)。
希望这有帮助!快乐编码
uhry853o4#
要从请求数据动态创建目录,只需将文件放在请求的末尾,将其他数据放在请求的顶部!multer将按照此顺序填充文本数据,并确保您可以访问用于动态目录创建的req数据。
enter image description here