2015-05-01 1 views
6

Ich bin ziemlich neu bei Node.js, und ich benutze Express und Busboy-Connect, um ein einfaches Datei-Upload-Formular zu erstellen, nur für WAV-Dateien. Hier ist, was ich versuche zu tun: - Starten Sie den Upload - Wenn der Mimetype nicht wav ist, umleiten auf eine Fehlerseite - sonst: Schreiben Sie die Datei auf dem Server und umleiten zurück.Wie man den Upload stoppt und in busboy umleitet, wenn der Mime-Typ ungültig ist?

Wenn der Mimetype gültig ist, funktioniert alles gut, aber wenn es nicht ist, kann ich nicht umleiten und der Browser hängt nur und schließlich Timeout. Mein Verständnis davon ist, dass der Browser nicht umleiten will, weil es darauf wartet, dass der Upload beendet wird, aber wie kann ich den Upload dann innerhalb meines Js-Codes abbrechen? Ich könnte das Problem umgehen und die Datei dann löschen, wenn es nicht der richtige Mimetyp ist, aber ich denke, es ist ein bisschen dumm, das zu tun, würde ich lieber einen Weg finden, ein Ereignis auszulösen, das es stoppen und sofort umleiten wird . ist hier (ein Ausschnitt aus) meine App-Code:

app.get('/', function (req, res) { 
    res.render(__dirname + '/public/index.ejs', {error: 0}); 
}); 

app.get('/error', function (req, res) { 
    res.render(__dirname + '/public/index.ejs', {error: 1}); 
}); 

app.post('/upload', function (req, res) { 
    var timestamp = new Date().getTime().toString(); 
    //console.log(timestamp); 
    var fstream; 
    req.pipe(req.busboy); 
    req.busboy.on('file', function (fieldname, file, filename, encoding, mimetype) { 

     if ("audio/wav" != mimetype) 
     { 
      console.log("invalid mimetype"); // that prints ok 
      // req.busboy.end(); // I tried that but it doesn't work 
      res.redirect('/error'); 


     } 
     else 
     { 
      console.log("Uploading: " + mimetype); 
      fstream = fs.createWriteStream(__dirname + '/tmp/' + timestamp + filename); 
      file.pipe(fstream); 
      fstream.on('close', function() { 
       res.redirect('back'); 

      }); 
     } 
    }); 



}); 

Kann mir jemand in die richtige Richtung? Vielen Dank für Ihre Hilfe!

Antwort

2

Okay, ich fand es in der Dokumentation von npm, wenn Sie denken, dass jemand diese Antwort von einer Google-Suche finden könnte, können Sie es aufgelöst lassen, ansonsten können Sie diesen Beitrag schließen/entfernen.

Grundsätzlich gibt es eine Funktion auf dem Filestream, die aufgerufen werden müssen busboy zu entsperren, so alles, was ich tun musste, um es funktioniert

file.resume(); 

vor auf die Fehlerseite hinzufügen Umleitung.

+1

Es funktionierte für mich, schrieb ich meine Lösung hier, wenn jemand es braucht http://Stackoverflow.com/questions/30465882/node-busboy-abort-upload/32222839#32222839 – Michael

Verwandte Themen