私は jQuery Form Plugin
および multer
ファイルをサーバーにアップロードします。これは問題なく機能しますが、ファイルを正確に保存する場所を決定する追加のパラメーターを渡そうとしています。
私は次のコードを持っていますが、それを拡張して、次のように動作させたいと思います。
<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>
uploadForm.submit(function() {
$(this).ajaxSubmit({
error: function(xhr) {
console.log('Error: ' + xhr.status);
},
success: function(response) {
console.log('Success: ' + response);
}
});
return false;
});
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");
});
});
注:mimetypeをチェックしたり、ユーザーファイルをサニタイズしたりしていないことはわかっていますが、現時点では主にセカンダリです。
問題は、最初にファイルを保存し、次にフォームの残りの部分(非表示フィールドなど)をmulter
に書き込むreq
です。
これを試して:
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");
}
});
});