我正在尝试重命名一个与multer上传的图像文件的请求参数。
下面是我的代码:
router.route('/upload/:userid')
.post(multer({
dest: 'uploads/'
}), function(req,res){
fs.readFile('uploads/' + req.files.file.name, function(err, data) {
fs.writeFile('uploads/' + req.params.userid + '.' + req.files.file.extension, data, function(err) {
fs.unlink('uploads/' + req.files.file.name, function(){
if(err) throw err;
});
});
});
res.json({ message: 'Successfully uploaded image!' });
});
它的工作很好,但我想知道它是否存在一些更干净和更容易与multer重命名功能。
它已经尝试过这样的事情:
router.route('/upload/:userid')
.post(multer({
dest: 'uploads/',
rename: function(req,res) {
return req.params.userid
}
}), function(req,res){
res.json({ message: 'Successfully uploaded image!' });
});
但它不起作用,因为req尚未填充(未定义)。
我使用httpie使用以下命令测试我的代码:
http.exe -f POST http://localhost:8080/upload/171284 file@D:\....\cat.jpg
有没有可能使用multer的重命名功能来做我用FS做的事情?还是有更好的办法?
谢谢你的反馈。
托玛斯
编辑
使用DiskStorage得新代码:
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/')
},
filename: function (req, file, cb) {
cb(null, req.params.userid + '-')
}
})
var upload = multer({ storage: storage })
router.route('/upload/:userid')
.post(multer({
storage: storage
}), function(req,res){
res.json({ message: 'Successfully uploaded image!' });
});
抛出错误:
Error: Route.post() requires callback functions but got a [object Object]
在Multer构造函数中没有rename
,因此在DiskStorage中有一个filename
。
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, '/tmp/my-uploads')
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now())
}
})
var upload = multer({ storage: storage })
filename
用于确定文件夹中文件的名称。如果未给出filename
,则每个文件将被赋予一个不包括任何文件扩展名的随机名称。