2015-05-01 6 views
6

Jestem dość nowym użytkownikiem Node.js i używam Express i Busboy-Connect, aby utworzyć prosty formularz przesyłania plików, tylko dla plików wav. Oto, co próbuję zrobić: - rozpocznij przesyłanie - jeśli typem MIME nie jest wav, przekieruj do strony błędu - w przeciwnym razie: napisz plik na serwerze i przekieruj z powrotem.Jak zatrzymać przesyłanie i przekierowanie w busboy, jeśli typ MIME jest nieprawidłowy?

Jeśli typ MIME jest prawidłowy, wszystko działa poprawnie, ale jeśli tak nie jest, nie mogę przekierować, a przeglądarka po prostu zawiesza się i w końcu kończy. Rozumiem, że przeglądarka nie chce przekierowywać, ponieważ czeka na zakończenie przesyłania, ale jak mogę anulować przesyłanie w ramach mojego kodu js? Mogę obejść problem i napisać plik, a następnie go usunąć, jeśli nie jest to odpowiedni typ MIME, ale myślę, że jest to trochę głupie, wolałbym znaleźć sposób na wywołanie zdarzenia, które zatrzyma go i natychmiast przekieruje . Oto (urywek) mojego kodu aplikacji:

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'); 

      }); 
     } 
    }); 



}); 

Czy ktoś może wskazać mi w dobrym kierunku? Dziękujemy za pomoc!

Odpowiedz

2

W porządku znalazłem go w dokumentach npm, jeśli sądzisz, że ktokolwiek mógłby być zainteresowany znalezieniem tej odpowiedzi z wyszukiwarki Google, możesz zostawić to rozwiązanie, w przeciwnym razie zamknij/usuń ten post.

Zasadniczo istnieje funkcja na FILESTREAM, które muszą zostać wezwany do odblokowania busboy, więc wszystko, co musiałem zrobić, aby to działało jest dodanie

file.resume(); 

przed przekierowaniem na stronę błędu.

+1

To zadziałało dla mnie, opublikowałem tutaj moje rozwiązanie, jeśli ktoś tego potrzebuje http://stackoverflow.com/questions/30465882/node-busboy-abort-upload/32222839#32222839 – Michael