在Express请求流中获取文件名

3

我想知道是否可能知道传入二进制请求的文件名。

这是我的情况,我有处理文件上传的代码:

router.route('/:filename')
.put(function(req,res){   
                var uuid = guid();
                var fileExtension = req.params.filename.substring(req.params.filename.lastIndexOf("."));
                if(!fs.existsSync('../files')){
                    fs.mkdirSync('../files')
                }

                var newFile = fs.createWriteStream('../files/'+uuid+fileExtension);     

                req.pipe(newFile);  

                req.on('end',function(end){             
                    console.log("Finished")
                    res.send(uuid+fileExtension)                                
                })
})

正如您现在所看到的,我需要在URL中指定文件名('/:filename')。我的问题是:是否可以从请求流中获取该属性,而不是从URL或表单键中获取?


这实际上取决于您使用的中间件来处理上传? - James
嗨@James,我只使用了Node流。我将请求流导入一个写入流对象中。正如您在我的发布的代码中所看到的那样:req.pipe(newFile); - Juan Camilo Mejia
你正在使用哪个版本的Express? - James
@James 我正在使用版本 4.15.3。 - Juan Camilo Mejia
2个回答

1

0
如果您使用multer中间件,您可以这样访问上传的文件名。
var multer = require('multer')
var upload = multer()
router.route('/:filename')
  .put(upload.single('fileField'),function(req,res){   

    var fileName = req.file.originalname

    var uuid = guid();
    var fileExtension = req.params.filename.substring(req.params.filename.lastIndexOf("."));
    if(!fs.existsSync('../files')){
      fs.mkdirSync('../files')
    }

    var newFile = fs.createWriteStream('../files/'+uuid+fileExtension);     

    req.pipe(newFile);  

    req.on('end',function(end){             
      console.log("Finished")
      res.send(uuid+fileExtension)                                
    })
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接