2017-07-27 31 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)         
    }) 
})