Aku mencoba untuk mendapatkan file upload mekanisme kerja sederhana dengan Ekspres 4.0 tapi saya terus mendapatkan undefined
untuk req.files
di app.post
tubuh. Ini kode yang relevan:
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');
});
.. dan kode Pug yang menyertainya:
form(name="uploader", action="/fileupload", method="post", enctype="multipart/form-data")
input(type="file", name="file", id="file")
input(type="submit", value="Upload")
Solusi
Terima kasih atas tanggapan oleh mscdex di bawah ini, saya telah beralih menggunakan busboy
alih-alih 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/
direktori di direktori home aplikasi Anda jika tidak, Anda akan mendapatkan kesalahan setelah Anda mengunggah.Jawaban:
The
body-parser
modul hanya menangani JSON dan pengiriman form urlencoded, tidak multi (yang akan terjadi jika Anda sedang file upload).Untuk multipart, Anda harus menggunakan sesuatu seperti
connect-busboy
ataumulter
atauconnect-multiparty
(multipartai / tangguh adalah apa yang awalnya digunakan dalam middleware bodyParser express). Juga FWIW, saya sedang mengerjakan lapisan level yang lebih tinggi di atas busboy yang dipanggilreformed
. Itu datang dengan middleware Express dan juga dapat digunakan secara terpisah.sumber
connect-busboy
bukan hanyabusboy
. Memperbarui posting asli saya dengan solusinya.connect-multiparty
opsi terbaik dari ini!reformed
masih dalam pengembangan? Komit terakhir Anda pada github adalah mulai 2014 ... Omong-omong, menurut Anda, modul apa yang terbaik untuk menangani data formulir multi-bagian? Maksud saya, "terbaik", yang didukung terbaik dan yang berfungsi lebih baik (lebih sedikit bug), dengan lebih banyak fitur dan dengan masa depan yang lebih panjang..Saya memilihmulter
karena tampaknya yang didukung terbaik, tetapi saya masih berpikir itu harus lebih didukung.Inilah yang saya temukan di Google:
Mekanisme yang cukup sederhana untuk mengunggah
sumber
fileupload
?app.js
const fileUpload = require('express-fileupload') app.use(fileUpload())
Sepertinya
body-parser
memang mendukung mengunggah file dalam Express 3, tetapi dukungan dibatalkan untuk Express 4 ketika tidak lagi termasuk Connect sebagai ketergantunganSetelah melihat-lihat beberapa modul dalam jawaban mscdex, saya menemukan bahwa
express-busboy
itu adalah alternatif yang jauh lebih baik dan hal yang paling dekat dengan pengganti drop-in. Satu-satunya perbedaan yang saya perhatikan adalah pada properti file yang diunggah.console.log(req.files)
menggunakan body-parser (Express 3) output objek yang tampak seperti ini:dibandingkan dengan
console.log(req.files)
menggunakan express-busboy (Express 4):sumber
1) Pastikan file Anda benar-benar dikirim dari sisi klien. Misalnya Anda dapat memeriksanya di Chrome Console: tangkapan layar
2) Berikut adalah contoh dasar dari backend NodeJS:
sumber
multer adalah middleware yang menangani "multipart / formulir-data" dan secara ajaib & membuat file yang diunggah dan data formulir tersedia bagi kami dalam permintaan sebagai request.files dan request.body.
menginstal multer: -
npm install multer --save
dalam file .html: -
dalam file .js: -
Semoga ini membantu!
sumber
Silakan gunakan kode di bawah ini
sumber
MASALAH SOLVED !!!!!!!
Ternyata
storage
fungsi DID TIDAK berjalan sekali pun. karena saya harus memasukkanapp.use(upload)
sebagaiupload = multer({storage}).single('file');
sumber
express-fileupload
Sepertinya satu-satunya middleware yang masih berfungsi hari ini.Dengan contoh yang sama,
multer
danconnect-multiparty
memberikan nilai yang tidak ditentukan dari req.file atau req.files , tetapiexpress-fileupload
berfungsi.Dan ada banyak pertanyaan dan masalah yang muncul tentang nilai kosong req.file / req.files .
sumber