当前位置: 首页 > 知识库问答 >
问题:

node.js multer重命名上载文件

慕意致
2023-03-14

我正在尝试重命名一个与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]

共有1个答案

卢承弼
2023-03-14

在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,则每个文件将被赋予一个不包括任何文件扩展名的随机名称。

 类似资料:
  • 问题内容: 我正在使用Selenium从此页面自动下载csv格式的文件: https://catalog.data.gov/dataset?tags=crime 这是我正在使用的代码: 此处设置了下载文件夹: 如何选择保存文件的名称?可以在下载时定义名称吗? 我的意思是这样的: 问题答案: 您无法控制通过selenium命名的下载文件 。 您可以使用目录观察者/观察者来检测文件何时下载,然后相应地

  • 文件重命名 文件重命名 源码/* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * *//* * 程序清单:更改名称 * * 程序会创建一个操作文件的函数并导出到msh命令列表 * 在

  • 我试图开发一个程序,这是检索一组文件从一个SFTP服务器到另一个本地目录。 下载完成后,我们用他的真实文件名重命名文件(服务器SFTP的文件名)

  • 我一直在使用PDF文件中的命名目标来打开文件中特定位置的PDF文件。负责生成PDF文档的团队使用工具从图书标记自动生成命名目的地,因此命名目的地的名称往往类似于*9\u Glossary*或*Additional\u Information*。我们被要求用多种语言制作相同的文档。我预计我们将收到多种外语的PDF文档,在相同的位置带有书签,但图书标记的名称当然将使用这些其他语言,自动生成的命名目的地

  • 问题内容: 我想批量重命名目录中的多个文件,以便从文件名中删除前面的数字和连字符。 如何使用linux命令执行此操作? 问题答案: 这应该使它: 它从块的开头(即数字)开始多次,然后连字符并将其从文件名中删除。 如果不在您的计算机中,则可以使用循环和: 测试 要么: