2017-07-27 5 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')で指定したファイル名が必要です。私の質問です:場合は、リキャストストリームからその属性を取ることが可能ではなく、URLまたはフォームキー?

+0

これは実際にアップロードを処理するために使用しているミドルウェアのタイプに依存していますか? – James

+0

こんにちは@ジェームズ私はちょうどノードのストリームを使用しています。私は、要求stramを書き込みストリームオブジェクトにパイプします。私の投稿されたコードで見ることができます:req.pipe(newFile); –

+0

どのExpressのバージョンを使用していますか? – 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)         
    }) 
}) 
0

あなたが要求のContent-Dispositionヘッダを検査し、手動でHTTPリクエストを処理する場合は、ファイル名の情報を解析する必要がありますようにアップロードされたファイル名にアクセスすることができます。

しかし、私は、既存のファイルアップロードミドルウェアの一部を見てお勧めします、ホイール

関連する問題