2016-03-07 12 views
5

Ich verwende die jQuery Form Plugin und multer, um Dateien auf meinen Server hochzuladen. Das funktioniert gut, aber ich versuche, einen zusätzlichen Parameter zu übergeben, der bestimmt, wo genau die Datei gespeichert wird.Hochladen einer Datei und Übergeben eines zusätzlichen Parameters mit Multer

Ich habe folgenden Code, der Ich mag würde verlängern, wie angegeben verhalten:

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> 

Client-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 Strecke

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

Hinweis: Ich weiß, dass ich nicht nach MIME-Typen suche oder die Benutzerdateien bereinige, aber es ist im Moment hauptsächlich sekundär für mich.

+0

Sie nehmen 'savePath' von' req.body'. –

+0

Nun, ich bekomme nur ein Objekt für 'userFile',' savePath' erschien nie im 'req.body' mit den Versuchen, die ich hatte. –

Antwort

11

Das Problem ist, dass multer, die Dateien zuerst speichert und dann nur schreibt req den restlichen Teil des Formulars - wie versteckte Felder.

Try this:

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

Vielen Dank für die Erklärung und Entschuldigung für die Verzögerung! Funktioniert perfekt! –

Verwandte Themen