Ja próbuje uzyskać prosty mechanizm przesyłania plików pracę z Express 4.0, ale wciąż otrzymuję undefined
za req.files
w app.post
organizmie. Oto odpowiedni kod:
var bodyParser = require('body-parser');
var methodOverride = require('method-override');
//...
app.use(bodyParser({ uploadDir: path.join(__dirname, 'files'), keepExtensions: true }));
app.use(methodOverride());
//...
app.post('/fileupload', function (req, res) {
console.log(req.files);
res.send('ok');
});
.. i dołączony kod Mops:
form(name="uploader", action="/fileupload", method="post", enctype="multipart/form-data")
input(type="file", name="file", id="file")
input(type="submit", value="Upload")
Rozwiązanie
Dzięki odpowiedzi mscdex poniżej, zmieniłem na używanie busboy
zamiast bodyParser
:
var fs = require('fs');
var busboy = require('connect-busboy');
//...
app.use(busboy());
//...
app.post('/fileupload', function(req, res) {
var fstream;
req.pipe(req.busboy);
req.busboy.on('file', function (fieldname, file, filename) {
console.log("Uploading: " + filename);
fstream = fs.createWriteStream(__dirname + '/files/' + filename);
file.pipe(fstream);
fstream.on('close', function () {
res.redirect('back');
});
});
});
./files/
katalog w katalogu domowym aplikacji, w przeciwnym razie po przesłaniu pojawi się błąd.Odpowiedzi:
body-parser
Moduł obsługuje tylko JSON i urlencoded zgłaszanie formularzy, nie wieloczęściowy (co byłoby w przypadku, gdy jesteś Przesyłanie plików).W przypadku multipartów musisz użyć czegoś takiego jak
connect-busboy
lubmulter
lubconnect-multiparty
(multiparty / formidable to, co pierwotnie było używane w oprogramowaniu pośrednim express bodyParser). Również FWIW, pracuję na jeszcze wyższym poziomie warstwy na szczycie busboy o nazwiereformed
. Jest wyposażony w oprogramowanie pośrednie Express i może być również używany osobno.źródło
connect-busboy
zamiast po prostubusboy
. Zaktualizowałem mój oryginalny post o rozwiązanie.connect-multiparty
najlepszą opcję spośród nich!reformed
wciąż w fazie rozwoju? Twoje ostatnie zatwierdzenie na githubie pochodzi z 2014 roku ... Nawiasem mówiąc, jaki jest najlepszy moduł do obsługi danych wieloczęściowych? Przez „najlepszy” rozumiem najlepiej obsługiwany i ten, który działa lepiej (mniej błędów), z większą liczbą funkcji i dłuższą przyszłością. Wybrałem,multer
ponieważ wydawało się to najlepiej obsługiwane, ale nadal uważam, że powinno być bardziej obsługiwane.Oto, co znalazłem w Google:
Co jest dość prostym mechanizmem przesyłania
źródło
fileupload
?app.js
const fileUpload = require('express-fileupload') app.use(fileUpload())
Wygląda na to,
body-parser
że obsługuje przesyłanie plików w Express 3, ale obsługa Express została odrzucona, gdy nie zawierała już połączenia jako zależnościPo przejrzeniu niektórych modułów w odpowiedzi mscdex odkryłem, że
express-busboy
była to znacznie lepsza alternatywa i najbliższa zamiana drop-in. Jedyne różnice, które zauważyłem, to właściwości przesłanego pliku.console.log(req.files)
za pomocą body-parsera (Express 3) wyprowadza obiekt, który wyglądał tak:w porównaniu do
console.log(req.files)
korzystania z express-busboy (Express 4):źródło
1) Upewnij się, że plik jest naprawdę wysyłany ze strony klienta. Na przykład możesz to sprawdzić w konsoli Chrome: zrzut ekranu
2) Oto podstawowy przykład backendu NodeJS:
źródło
multer to oprogramowanie pośrednie, które obsługuje „multipart / form-data” i magicznie oraz udostępnia przesłane pliki i dane formularzy na żądanie jako request.files i request.body.
instalacja multera: -
npm install multer --save
w pliku .html: -
w pliku .js: -
Mam nadzieję że to pomoże!
źródło
Proszę użyć poniższego kodu
źródło
PROBLEM ROZWIĄZANY !!!!!!!
Okazuje się, że
storage
funkcja NIE została uruchomiona ani razu. ponieważ musiałem dołączyćapp.use(upload)
jakoupload = multer({storage}).single('file');
źródło
express-fileupload
wygląda jak jedyne oprogramowanie pośrednie, które nadal działa w dzisiejszych czasach.Z tym samym przykładem
multer
iconnect-multiparty
podaje niezdefiniowaną wartość req.file lub req.files , aleexpress-fileupload
działa.I pojawia się wiele pytań i problemów dotyczących pustej wartości pliku req.file / req.files .
źródło