2016-03-07 20 views
5

jQuery Form Pluginmulterを使用して、自分のサーバーにファイルをアップロードしています。これは正常に動作しますが、ファイルを保存する場所を正確に判断するための追加パラメータを渡そうとしています。ファイルをアップロードし、multerで追加パラメータを渡す

私が述べたように動作するように拡張したいコードを、以下のいる

HTML

<form id="uploadForm" 
     enctype="multipart/form-data" 
     action="/files" 
     method="post"> 
    <input type="file" id="userFile" name="userFile"/> 
    <input type="text" hidden id="savePath" name="savePath" value="path"/> 
</form> 

クライアントJS

uploadForm.submit(function() { 
    $(this).ajaxSubmit({ 

     error: function(xhr) { 
      console.log('Error: ' + xhr.status); 
     }, 

     success: function(response) { 
      console.log('Success: ' + response); 
     } 
    }); 

    return false; 
}); 

Node.jsのルート

app.post(APIpath + "file",function(req,res){ 
    var storage = multer.diskStorage({ 
     destination: absoluteServePath+ "/" + config.filePath, 
     filename: function (req, file, cb) { 
      cb(null, file.originalname); 
     } 
    }); 
    var upload = multer({ storage : storage}).any(); 

    upload(req,res,function(err) { 
     if(err) { 
      console.log(err); 
      return res.end("Error uploading file."); 
     } 
     res.end("File has been uploaded"); 
    }); 
}); 

注:私はmimetypesのチェックやユーザーファイルのサニタイズはしていませんが、今は主に私にとっては二次的です。

+0

はこれを試してみてください。 –

+0

さて、私は 'userFile'のためのオブジェクトを取得しています、' savePath'は私の試みで 'req.body'に登場しませんでした。 –

答えて

11

multerは、ファイルを最初に保存してから、フォームの残りの部分(隠しフィールドなど)にのみ書き込みます(req)。あなたはreq.body` `から` savePath`を取るこ​​とができます

app.post(APIpath + "file",function(req,res){ 
    var storage = multer.diskStorage({ 
     destination: tmpUploadsPath 
    }); 
    var upload = multer({ storage : storage}).any(); 

    upload(req,res,function(err) { 
     if(err) { 
      console.log(err); 
      return res.end("Error uploading file."); 
     } else { 
      console.log(req.body); 
      req.files.forEach(function(f) { 
      console.log(f); 
      // and move file to final destination... 
      }); 
      res.end("File has been uploaded"); 
     } 
    }); 
}); 
+0

説明をありがとうございます、遅れてごめんなさい!完璧に動作します! –

関連する問題