node.js multer重命名上传的文件

时间:2016-02-11 16:51:45

标签: node.js multer

我正在尝试通过请求参数重命名使用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!' });
});

它运行良好,但我想知道它是否存在更清晰,更容易使用multer重命名功能。

它已经尝试过这样的事情:

http.exe -f POST http://localhost:8080/upload/171284 file@D:\....\cat.jpg

但它不起作用,因为尚未填充req(未定义)。

我使用httpie使用以下命令测试我的代码:

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!' });
});

是否可以使用multer的重命名功能来执行我对fs的操作? 或者有更好的方法吗?

感谢您的反馈。

托马斯

修改

我使用diskStorage的新代码:

Error: Route.post() requires callback functions but got a [object Object]

抛出错误:

{{1}}

1 个答案:

答案 0 :(得分:1)

在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,则每个文件都会给出一个   随机名称,不包含任何文件扩展名。