2015-05-01 13 views
6

Sono abbastanza nuovo su Node.js e sto utilizzando Express e Busboy-Connect per creare un semplice modulo di caricamento file, solo per i file wav. Ecco cosa sto cercando di fare: - avvia il caricamento - se il mimetype non è wav, reindirizza a una pagina di errore - else: scrivi il file sul server e reindirizza indietro.Come interrompere il caricamento e il reindirizzamento in busboy se il tipo mime non è valido?

Se il mimetype è valido, tutto funziona correttamente, ma se non lo è non posso reindirizzare e il browser è semplicemente sospeso e alla fine scade. La mia comprensione è che il browser non vuole reindirizzare perché è in attesa del completamento del caricamento, ma come posso annullare il caricamento nel mio codice js? Potrei risolvere il problema e scrivere il file, quindi cancellarlo se non è il giusto mimetype, ma penso che sia un po 'stupido farlo, preferirei trovare un modo per attivare un evento che lo fermi e reindirizzare immediatamente . Ecco (un frammento di) mio codice app:

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

      }); 
     } 
    }); 



}); 

Qualcuno mi può puntare nella giusta direzione? Grazie per il vostro aiuto!

risposta

2

OK. L'ho trovato nei documenti di npm, se pensi che qualcuno possa essere interessato a trovare questa risposta da una ricerca su google, puoi lasciarlo risolto, altrimenti sentiti libero di chiudere/rimuovere questo post.

in fondo non c'è una funzione sul filestream che hanno bisogno di essere chiamato per sbloccare aiuto cameriere, quindi tutto quello che dovevo fare per farlo funzionare è quello di aggiungere

file.resume(); 

prima di reindirizzare alla pagina di errore.

+1

Ha funzionato per me, ho postato la mia soluzione qui se qualcuno ne ha bisogno http://stackoverflow.com/questions/30465882/node-busboy-abort-upload/32222839#32222839 – Michael

Problemi correlati