2016-04-06 4 views
0

Ich habe Probleme mit dem Hochladen von Dateien mit node.js und express framework.Laden Sie die Dateien vom Client-Browser in mongodb oder Festplatte hoch?

Unten ist mein app.js Code:

var express = require('express'); 
var fs = require('fs'); 
var busboy = require('connect-busboy'); 

var app = express(); 

app.use(busboy()); 

app.post('/fileupload', function(req, res) { 
    var fstream; 
    console.log(req.filename); 
    req.pipe(req.busboy); 
    req.busboy.on('file', function (fieldname, file, filename) { 
     console.log("Uploading: " + filename); 
     fstream = fs.createWriteStream(__dirname + '/public/' + filename); 
     file.pipe(fstream); 
     fstream.on('close', function() { 
      res.redirect('back'); 
     }); 
    }); 
}); 

HTML-Code ist

<form id="uploadForm" enctype="multipart/form-data" action="/fileupload" method="post"> 
    <div class="azureD" style="display:none;"> 
     <div class="pull-left"> 
      <label class="labelTemp">Subscription ID</label> 
      <div class="clickRole addStoTabWid"> 
       <input type="text" id="" placeholder="" style="border:none;width:100%;">  
      </div> 
     </div> 
     <div class="pull-left"> 
      <label class="labelTemp">Upload .pem file</label> 
      <div class="clickRole addStoTabWid"> 
       <input type="file" name="file" id="file" placeholder="" style="border:none;width:100%;"> 
      </div> 
     </div> 
     <div class="modal-footer"> 
     </br> 
     <input type="submit" value="Upload" name="submit"> 
    </div> 
</form> 

Ich bin der Brache Fehler in node.js Konsole bekommen

TypeError: Cannot read property 'on' of undefined 
at IncomingMessage.Readable.pipe (_stream_readable.js:495:7) 
at C:\Users\sangamesh.b\Desktop\release-2\Rapid_cloud\app.js:138:9 
at callbacks (C:\Users\sangamesh.b\Desktop\release-2\Rapid_cloud\node_modules\express\lib\router\index.js:161:37) 
at param (C:\Users\sangamesh.b\Desktop\release-2\Rapid_cloud\node_modules\express\lib\router\index.js:135:11) 
at pass (C:\Users\sangamesh.b\Desktop\release-2\Rapid_cloud\node_modules\express\lib\router\index.js:142:5) 
at Router._dispatch (C:\Users\sangamesh.b\Desktop\release-2\Rapid_cloud\node_modules\express\lib\router\index.js:170:5) 
at Object.router (C:\Users\sangamesh.b\Desktop\release-2\Rapid_cloud\node_modules\express\lib\router\index.js:33:10) 
at next (C:\Users\sangamesh.b\Desktop\release-2\Rapid_cloud\node_modules\express\node_modules\connect\lib\proto.js:190:15) 
at Object.methodOverride [as handle] (C:\Users\sangamesh.b\Desktop\release-2\Rapid_cloud\node_modules\express\node_modules\connect\lib\middleware\methodOverride.js:37:5) 
at next (C:\Users\sangamesh.b\Desktop\release-2\Rapid_cloud\node_modules\express\node_modules\connect\lib\proto.js:190:15) 
_stream_readable.js:505 
dest.end(); 
    ^
TypeError: Cannot read property 'end' of undefined 
at IncomingMessage.onend (_stream_readable.js:505:9) 
at IncomingMessage.g (events.js:199:16) 
at IncomingMessage.emit (events.js:129:20) 
at _stream_readable.js:908:16 
at process._tickDomainCallback (node.js:381:11) 

ich überprüft haben Mit allem, was ich nicht in der Lage bin, dieses Problem mit meinem Code zu beheben, bitte helfen Sie mir in dieser Ausgabe.

und ich möchte andere alternative Möglichkeiten wissen, gibt es die Datei aus dem Browser laden und speichern sie in mongodb oder Localdisk

Antwort

0

Verwenden Sie das folgende Codefragment. Es funktioniert für Sie

var upload_path = path.resolve(__dirname + '../../../public/uploads'); 
var result = { 
    status: 0, 
    message: '', 
    data: '' 
}; 
fs.readFile(req.files.file.path, function (err, data) { 

    var imageName = Date.now() +"_"+req.files.file.name; 

    /// If there's an error 
    if(err){ 
     //error 
    } else { 
     var newPath = path.resolve(upload_path, imageName); 

     fs.writeFile(newPath, data, function (err) { 
      if(err) { 
       //error 
      } else { 
       fs.unlink(req.files.file.path, function() { 
        if (err) { 
         result.status = -1; 
         result.message = err; 
        } else { 
         result.data = imageName; 
        } 
        res.jsonp(result); 
       }); 
      } 
     }); 
    } 
}); 
+0

Bitte mehr kann es ausarbeiten, wo ich – Rapid

+0

diesen Code snippet..Thanks im Voraus hinzufügen müssen und auch nach dem Code hinzufügen ich dieses Problem bin vor“.WRITE (string, Codierung, Offset, length) ist veraltet. Verwenden Sie stattdessen write (string [, offset [, length]] [, encoding]). " – Rapid

+0

Ersetzen Sie diesen Code durch Ihre nach app.post ('/ fileupload', Funktion (req, res)) { – Gurpinder

0

Es sieht aus wie fstream als file.pipe() nicht definiert den Fehler verursacht. Stellen Sie sicher, dass der filepath, der an fs.createWriteStream() übergeben wurde, korrekt ist.

Verwandte Themen