2012-08-03 8 views
6

Praca z ExpressJj przez około miesiąc natknąłem się na problem przesyłania plików. Pomimo konsultingowych Google & różnych blogach Zawiodłem znalezienie odpowiedzi na trzy następujące pytania:przesyłanie plików expressjs, sprawdzanie, czy rzeczywiście został wysłany plik, określ maksymalny rozmiar pliku i zachowaj jego nazwę

Co muszę zrobić/jakie ustawienia dla bodyParser muszę wybrać w celu:

  1. Marka pewien, że rzeczywiście przesłano plik (obecnie, podczas przesyłania formularza bez wybierania pliku tworzony jest pusty plik).

  2. Gdzie mogę podać wartość maksymalnego rozmiaru pliku, który może mieć plik?

  3. Jak mogę pominąć zmianę nazwy pliku?

Obecnie jestem w tym bodyParser w moim Express (v 3.0.0.) Aplikacji z następujących opcji:

{keepExtensions: true, uploadDir: __dirname + '/public/uploads'} 

Odpowiedz

4

Niedawno wpadł na podobny problem. na pytanie # 2, sprawdź http://www.senchalabs.org/connect/middleware-limit.html

app.use(express.limit('4M')); // in your app.configure()

app.post('/upload', function(req, res) { 
    var fs = require('fs'), 
     file = req.files.myfile; //your file field; 


    if(file.size === 0) { // question #1 
     fs.unlinkSync(file.path); 
     res.redirect('/error?'); 
    } else { //question #3 
     var fn = file.path.split('/'); 
     fs.rename(file.path, file.path.replace(fn[fn.length-1], file.name)); 
     res.redirect('/success?'); 
    } 
}); 
+1

dziękuję za pomoc mnie na ten jeden - jest to dość dziwne, że nie istnieją żadne parametry oferowanych które pozwalają radzić sobie z tego rodzaju rzeczy bezpośrednio. –

1

o swoim niepokoju

Upewnij się, że rzeczywiście był to plik przesłany (obecnie przy składaniu formularz bez wyboru pliku pusty plik zostanie utworzony).

Po długich poszukiwaniach znalazłem doskonałe rozwiązanie

Najpierw trzeba zainstalować node-formidable

Następnie po tym biblioteki, aby sprawdzić, czy plik przesłany w pierwszej kolejności

var form = new formidable.IncomingForm(); 

form.parse(req, function(err, fields, files) { 
    if (Object.keys(files).length !== 0) { 
    console.log("File is exist") 
    } else { 
    console.log("File is not exist") 
    } 
}); 

I o rozmiarze można to sprawdzić.

form.maxFieldsSize = 2 * 1024 * 1024; 

Pozdrawiamy.

Abdulaziz Noor

Powiązane problemy