2016-04-26 15 views
0

Ich möchte Dateien vom Client zum Server hochladen und sie dann in einem Ordner speichern, der dem Benutzer entspricht, der diese spezielle Datei hochgeladen hat! Der Code scheint in Ordnung zu sein, aber das Problem scheint fs-bezogen zu sein! Fs überträgt nur 15 Byte der Datei. Tatsächlich überträgt es nur 15 Bytes von jedem Dateityp, den ich bisher versucht habe (Bilder und Videos)! Das ist mein Code bis jetzt, kannst du mir bitte helfen? Vielen Dank!Knoten Js FS nicht ganze Datei schreiben

var multipart = require('connect-multiparty'); 
var multipartMiddleware = multipart(); 


app.post('/upload', multipartMiddleware, function(req, res){ 
    var file = req.files.thumbnail; // that's what I've named the html input element 
    var stream = fs.createWriteStream(file.path); 
    fs.writeFile('./users/'+req.user._id+'/'+file.originalFilename, stream); 
    res.redirect('/'); 
}); 
+0

Ich denke, Sie sollten einen Callback zum Aufruf 'writeFile' hinzufügen und nur umleiten, nachdem der Schreibvorgang abgeschlossen wurde, zu einer Erfolgs- oder Fehlerseite. – Cristy

+0

Versuchte es! Gleiches, nur 15 Bytes werden übertragen! – Jim

+0

Und wenn Sie den 'req.files.thumbnail' Inhalt in der Konsole protokollieren erhalten Sie alle Daten? – Cristy

Antwort

1

Das Problem ist in diesen Zeilen:

var stream = fs.createWriteStream(file.path); fs.writeFile('./users/'+req.user._id+'/'+file.originalFilename, stream);

Stream ist nicht der Inhalt der Datei von 'file.path'. Stattdessen ist es ein Stream, über den Sie in 'file.path' schreiben können.

Zum Beispiel:

var stream = fs.createWriteStream(file.path); stream.write('some content'); stream.end(); Wenn Sie es verwenden, um eine Datei zu schreiben fs.writeFile verwendet, wird die Objektdarstellung, was geschrieben steht, das ist '[Object, Object] (15 byes).

Was sollten Sie ist dabei von der anderen Datei zu lesen, und halten Sie den Inhalt in einem String oder Buffer, nicht in einem Strom:

var stream = fs.readFileSync(file.path); Und dann in die Zieldatei schreiben. Denken Sie daran, die Weiterleitung nur nach Abschluss durchzuführen, wenn Sie das asynchrone Modell zum Schreiben von Dateien verwenden. Es gibt übrigens eine writeFileSync() API, über die Sie auch synchron schreiben können.

Hoffe, das hilft.

0

wie diese versuchen:

app.post('/upload', multipartMiddleware, function(req, res){ 
    var file = req.files.thumbnail; // that's what I've named the html input element 
    fs.writeFile('./users/'+req.user._id+'/'+file.originalFilename, file, function(err) { 
     if(err) { 
     res.redirect('error_page'); 
     return console.log(err); 
     } 

     console.log("The file was saved!"); 
     res.redirect('/'); 
    }); 
}); 
+0

Die Datei wird gespeichert, aber es sind immer noch 15 Bytes! – Jim

+0

Was passiert, wenn Sie den 'var file = thumbnail' Teil mit' var file = "1234567891011121314151617181920" 'ersetzen, was wird geschrieben? – Cristy

+0

Eine Datei wird in das gewünschte Verzeichnis erstellt, aber es heißt nicht definiert, und es ist keine Foto-/Videodatei! – Jim