2017-07-27 46 views
0

我想知道是否有可能知道什么是不包含的二进制请求的文件名。获取快速请求流中的文件名

这是我的情况我有这样的代码来处理文件上传

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')指定的文件名。我的问题是:如果可以从resquest流获取该属性,而不是URL或表单键?

+0

这真的取决于您用来处理上传的中间件的类型吗? – James

+0

嗨@詹姆斯我只使用节点流。我将请求stram写入一个写入流对象。你可以在我的发布代码中看到:req.pipe(newFile); –

+0

您使用哪种版本的快递? – James

回答

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)         
    }) 
})