Kata pengantar
Saat mengunduh file dengan HTTP, Anda hanya perlu mengatur header respons yang relevan di server dan menggunakan biner untuk mengirimkan data file, dan klien (browser) akan menerima data file berdasarkan header respons. Di node.js, setelah mengatur header respons, membaca aliran file, dan kemudian mentransfer aliran ke Response objek respons menggunakan metode “.pipe()” , Anda dapat mengimplementasikan server unduhan file sederhana.
1. Pendahuluan Unduh File
HTTP mengimplementasikan interaksi negara berdasarkan header permintaan dan header respons. Setelah mendapatkan status respons yang benar dari server, klien pertama -tama akan menguraikan header respons dan menerima dan menampilkan data (badan respons) berdasarkan header respons. Untuk unduhan file, proses implementasi adalah sebagai berikut:
1. Klien memulai permintaan sumber daya file
2. Server mencari file yang sesuai dan menetapkan header respons seperti " Content-Type " dan " Content-Disposition " untuk mewakili jenis "MIME" dan deskripsi file masing-masing.
3. Klien parse dan menerima data file berdasarkan header respons yang dikembalikan oleh server.
Header respons yang perlu ditetapkan
Saat menyiapkan header respons unduhan file, selain header respons HTTP yang umum digunakan, lebih penting untuk mengatur dua header respons berikut:
Tipe konten: Aplikasi/Octet-StreamContent-Disposition: Lampiran; FileName = myfilename.ext
Dalam pengaturan di atas, " Content-Type: application/octet-stream " memberi tahu browser bahwa ini adalah file biner, dan " Content-Disposition " memberi tahu browser bahwa ini adalah lampiran yang perlu diunduh dan memberi tahu browser nama file default. Jika header respons " Content-Disposition " tidak ditambahkan, browser dapat mengunduh atau menampilkan konten file, dan pemrosesan browser yang berbeda bervariasi.
2. Implementasi server unduhan file node.js
Selanjutnya, kami mengimplementasikan server unduhan file sederhana berdasarkan kerangka kerja Express, yang terutama mencakup dua fungsi: menjelajah file server dan mengunduh file .
2.1 Menambahkan rute
Setelah membuat aplikasi Express, tambahkan dua rute berikut:
router.get ('/file', function (req, res, next) {// show server file}); router.get ('/file/: filename', function (req, res, next) {// mengimplementasikan unduhan file});Dua rute yang ditambahkan di atas digunakan untuk: menampilkan file server dan mengimplementasikan unduhan file .
2.2 Tampilkan file server
Untuk mewujudkan tampilan file server, Anda harus membaca direktori file melalui modul " fs " dan melakukan pemeriksaan file/direktori , dll. Anda juga perlu menggunakan modul " path " untuk memproses jalur file. Pertama, kedua modul ini diperkenalkan:
const fs = membutuhkan ('fs'); const path = membutuhkan ('path');Kode implementasi untuk menampilkan file server adalah sebagai berikut:
router.get ('/file', function (req, res, next) {// show server file // file direktori var filePath = path.join (__ dirname, './'); fs.readdir (filePath, function (err, hasil) {if (err) lempar err; if (if (s.length> 0) {var file = [if = ifs.statsync (path.join (filePath, file)). isFile ()) {file.push (file)); Dalam kode di atas, setelah membaca direktori, daftar file yang dapat diunduh ditampilkan melalui file tampilan " files.ejs ". Kodenya adalah sebagai berikut:
<! Doctype html> <html> <head> <title> Unduh Pemilihan File </itement> </head> <hody> <h1> Pilih file unduhan: </h1> <%if (file.length> 0) {%> <ul> <%file. %> </a> </li> <%})%> </ul> <%} else {%> <p> Tidak ada file yang dapat diunduh ... </p> <%}%> </body> </html>2.3 Menerapkan Unduhan File
Saat mengunduh file, pertama -tama Anda dapat membaca file ke dalam " Buffer ", dan kemudian mengirim data file melalui metode " res.send()” atau " res.end()” , atau Anda dapat mengirim data file berdasarkan stream (" Stream "). Saat menggunakan " Stream " untuk mengimplementasikan unduhan file, Anda dapat menggunakan metode " fs.createReadStream()” untuk membuat aliran yang dapat dibaca, dan Response objek respons adalah aliran yang dapat ditulis. Dengan cara ini, Anda hanya perlu mentransfer aliran file ke aliran respons Response melalui metode ”.pipe()” .
Kode implementasi unduhan file adalah sebagai berikut:
router.get ('/file/: filename', function (req, res, next) {// mengimplementasikan file unduh var filename = req.params.filename; var filepath = path.join (__ dirname, statets); var stat stats = fs.statsync (filePath); if (stats.isfile (), {fILePath); ife (stattets.) {filepath); 'Disposisi': 'Lampiran;Meringkaskan
Di atas adalah semua konten menggunakan node.js untuk mencapai unduhan file http. Saya harap ini akan membantu semua orang untuk belajar Node.js.