2016-08-05 3 views
2

Ich versuche, meinen Kopf um diesen Fehler zu wickeln, den ich verstehe, ich verstehe nicht warum. Ich habe ein paar Posts gesehen, aber es sind alles verschiedene Fälle und keiner passt zu meinem. Also schätze Hilfe. was ich hochladen möchte mehrere Dateien hochladen. aber ich Datei hochladen Es ist Arbeit nur eine. aber wenn ich versuche, mehrere Dateien hochzuladen, funktioniert es nicht können Sie mir eine Antwort geben?Node.js 344 error Kann Header nicht festlegen, nachdem sie gesendet werden

router.post('/contents/insert/upload', ensureAuthenticated, function(req, res, next) { 
 
\t 
 
\t var form = new formidable.IncomingForm(); 
 
\t 
 
\t form.parse(req); 
 
// \t form.on("fileBegin", function (name, file){ 
 
// \t \t console.log('upload come on3'); 
 
// \t \t 
 
// }); 
 
    form.on("file", function (name, file){ 
 
     fs.readFile(file.path, function(error, data){ 
 
     \t var filePath = __dirname + '/../public/uploads/' + file.name; 
 
     \t 
 
     \t fs.writeFile(filePath, data, function(error){ 
 
     \t \t if(error){ 
 
     \t \t \t throw err; 
 
     \t \t \t //res.redirect('back'); 
 
     \t \t }else { 
 
     \t \t \t res.redirect('back'); 
 
     \t \t } 
 
     \t }); 
 
     }); 
 
    }); 
 

 
});
<form action="/adm/contents/insert/upload" method="post" enctype="multipart/form-data" > 
 
\t \t \t  <!-- <input type="file" name="file" /> 
 
\t \t \t  <input type="submit" /> --> 
 
\t \t \t \t <div class="file-field input-field"> 
 
\t \t \t  \t <div class="btn"> 
 
\t \t \t \t \t \t <span>input images</span> 
 
\t \t \t \t  \t <input type="file" name="file" multiple> 
 
\t \t \t  \t </div> 
 
\t \t \t  \t <div class="file-path-wrapper"> 
 
\t \t \t   \t <input class="file-path validate" type="text"> 
 
\t \t \t  \t </div> 
 
\t \t \t  </div> 
 
\t \t \t  <input type="submit" class="btn waves-effect waves-light" value="upload" /> 
 
\t \t \t </form>

Antwort

2

Die file Veranstaltung wird für jede Datei im Upload ausgelöst werden, so schließlich wird Ihr Code res.redirect() für jede hochgeladene Datei ausgeben. Dies wird den Fehler verursachen (Sie können eine Weiterleitung nur einmal in der Lebensdauer einer Anforderung senden oder zurücksenden).

Stattdessen Sie für das end Ereignis hören mögen, und geben Sie die Umleitung dort:

form.on("file", function (name, file) { 
    ...handle the file copy here, but don't call `res.redirect()` anywhere... 
}); 

form.on("end", function() { 
    res.redirect('back'); 
}); 

FWIW, so scheint es mir, dass Sie die uploadDir Option von Formidable festlegen mögen, oder fs.rename(), anstelle Lesen der Datei nach dem Hochladen und Schreiben an einen neuen Ort (was nicht sehr effizient ist).

+0

ich fügen Sie den Code} else { \t \t \t form.on ("end", function() { \t \t \t \t res.redirect ('zurück'); \t \t \t \t}); \t \t} was Sie schreiben. Es funktioniert vielen Dank. aber ich weiß nicht, warum der Browser geladen wird ... sogar eingefügt –

+0

Sie sollten nicht hinzufügen, die 'End'-Handler _inside_ der' Datei' Handler, sondern auf der gleichen Ebene. Ich werde meine Antwort bearbeiten, um sie zu klären. – robertklep

+0

Vielen Dank !! Es funktioniert zu klären !! wähle deine Antwort –