คำนำ
เมื่อดาวน์โหลดไฟล์ด้วย HTTP คุณจะต้องตั้งค่าส่วนหัวการตอบกลับที่เกี่ยวข้องบนเซิร์ฟเวอร์และใช้ไบนารีเพื่อส่งข้อมูลไฟล์และไคลเอนต์ (เบราว์เซอร์) จะได้รับข้อมูลไฟล์ตามส่วนหัวการตอบกลับ ใน node.js หลังจากตั้งค่าส่วนหัวการตอบกลับอ่านสตรีมไฟล์แล้วถ่ายโอนสตรีมไปยัง Response ของวัตถุตอบกลับโดยใช้วิธี “.pipe()” คุณสามารถใช้เซิร์ฟเวอร์ดาวน์โหลดไฟล์ง่ายๆ
1. การดาวน์โหลดไฟล์บทนำ
HTTP ใช้การโต้ตอบของรัฐตามส่วนหัวคำขอและส่วนหัวการตอบกลับ หลังจากได้รับสถานะการตอบกลับที่ถูกต้องของเซิร์ฟเวอร์ไคลเอนต์จะแยกวิเคราะห์ส่วนหัวการตอบกลับก่อนและรับและแสดงข้อมูล (ร่างกายตอบสนอง) ตามส่วนหัวการตอบกลับ สำหรับการดาวน์โหลดไฟล์กระบวนการใช้งานมีดังนี้:
1. ไคลเอนต์เริ่มคำขอทรัพยากรไฟล์
2. เซิร์ฟเวอร์ค้นหาไฟล์ที่เกี่ยวข้องและตั้งค่าส่วนหัวการตอบกลับเช่น " Content-Type " และ " Content-Disposition " เพื่อแสดงประเภท "MIME" และคำอธิบายไฟล์ของไฟล์ตามลำดับ
3. ไคลเอ็นต์แยกวิเคราะห์และรับข้อมูลไฟล์ตามส่วนหัวการตอบกลับที่ส่งคืนโดยเซิร์ฟเวอร์
ส่วนหัวการตอบสนองที่ต้องตั้งค่า
เมื่อตั้งค่าส่วนหัวการตอบสนองการดาวน์โหลดไฟล์นอกเหนือจากส่วนหัวการตอบกลับ HTTP ที่ใช้กันทั่วไปมันเป็นสิ่งสำคัญกว่าในการตั้งค่าส่วนหัวตอบกลับสองข้อต่อไปนี้:
ประเภทเนื้อหา: แอปพลิเคชัน/octet-streamcontent-disposition: เอกสารแนบ; filename = myFilename.ext
ในการตั้งค่าข้างต้น " Content-Type: application/octet-stream " บอกเบราว์เซอร์ว่านี่เป็นไฟล์ไบนารีและ " Content-Disposition " บอกเบราว์เซอร์ว่านี่เป็นไฟล์แนบที่จำเป็นต้องดาวน์โหลดและบอกชื่อไฟล์เริ่มต้นของเบราว์เซอร์ หากไม่ได้เพิ่มส่วนหัว " Content-Disposition " เบราว์เซอร์อาจดาวน์โหลดหรือแสดงเนื้อหาไฟล์และการประมวลผลของเบราว์เซอร์ที่แตกต่างกันจะแตกต่างกันไป
2. Node.js File Download Server ใช้งานการใช้งาน
ต่อไปเราใช้เซิร์ฟเวอร์ดาวน์โหลดไฟล์อย่างง่ายตามเฟรมเวิร์กด่วนซึ่งส่วนใหญ่มีฟังก์ชั่นสองฟังก์ชั่น: การเรียกดูเซิร์ฟเวอร์ไฟล์ และ การดาวน์โหลดไฟล์
2.1 การเพิ่มเส้นทาง
หลังจากสร้างแอปพลิเคชันด่วนให้เพิ่มสองเส้นทางต่อไปนี้:
Router.get ('/files', function (req, res, ถัดไป) {// แสดงไฟล์เซิร์ฟเวอร์}); Router.get ('/file/: filename', function (req, res, next) {// ใช้การดาวน์โหลดไฟล์});สองเส้นทางที่เพิ่มขึ้นด้านบนใช้เพื่อ: แสดงไฟล์เซิร์ฟเวอร์และใช้การดาวน์โหลดไฟล์
2.2 ไฟล์แสดงเซิร์ฟเวอร์
ในการรับรู้การแสดงไฟล์เซิร์ฟเวอร์คุณต้อง อ่านไดเรกทอรีไฟล์ ผ่านโมดูล " fs " และดำเนิน การตรวจสอบไฟล์/ไดเรกทอรี ฯลฯ คุณต้องใช้โมดูล " พา ธ " เพื่อประมวลผลเส้นทางไฟล์ ก่อนอื่นมีการแนะนำโมดูลทั้งสองนี้:
const fs = ต้องการ ('fs'); const path = ต้องการ ('path');รหัสการใช้งานสำหรับการแสดงไฟล์เซิร์ฟเวอร์มีดังนี้:
router.get ('/files', ฟังก์ชัน (req, res, ถัดไป) {// แสดงไฟล์เซิร์ฟเวอร์ // ไดเรกทอรีไฟล์ var filepath = path.join (__ dirname, './'); fs.readdir (filepath, ฟังก์ชัน (err, ผลลัพธ์) if (fs.statsync (path.join (filepath, ไฟล์)). isfile ()) {files.push (ไฟล์); ในรหัสข้างต้นหลังจากอ่านไดเรกทอรีรายการไฟล์ที่ดาวน์โหลดได้จะปรากฏขึ้นผ่านไฟล์มุมมอง " files.ejs " รหัสมีดังนี้:
<! doctype html> <html> <head> <ditle> ดาวน์โหลดการเลือกไฟล์ </title> </head> <body> <h1> โปรดเลือกไฟล์ดาวน์โหลด: </h1> <%ถ้า (files.length> 0) {%> %> </a> </li> <%})%></ul> <%} อื่น {%> <p> ไม่มีไฟล์ที่ดาวน์โหลดได้ ... </p> <%}%> </body> </html>2.3 ใช้ไฟล์ดาวน์โหลด
เมื่อดาวน์โหลดไฟล์คุณสามารถอ่านไฟล์ลงใน " Buffer " ก่อนจากนั้นส่งข้อมูลไฟล์ผ่านวิธีการ " res.send()” หรือ " res.end()” หรือคุณสามารถส่งข้อมูลไฟล์ตามสตรีม (" Stream ") เมื่อใช้ " Stream " เพื่อใช้การดาวน์โหลดไฟล์คุณสามารถใช้เมธอด " fs.createReadStream()” เพื่อสร้างสตรีมที่อ่านได้และ Response วัตถุตอบกลับเป็นสตรีมที่เขียนได้ ด้วยวิธีนี้คุณจะต้องถ่ายโอนสตรีมไฟล์ไปยังสตรีมตอบสนอง Response ผ่านวิธี ”.pipe()”
รหัสการใช้งานดาวน์โหลดไฟล์มีดังนี้:
router.get ('/file/: filename', function (req, res, ถัดไป) {// ใช้ไฟล์ดาวน์โหลดไฟล์ var filename = req.params.filename; var filepath = path.join (__ dirname, filename); var stats = fs.statsync (filepath); 'Application/Octet-stream', 'Content-Disposition': 'ไฟล์แนบ;สรุป
ข้างต้นคือเนื้อหาทั้งหมดของการใช้ node.js เพื่อให้ได้การดาวน์โหลดไฟล์ HTTP ฉันหวังว่ามันจะเป็นประโยชน์สำหรับทุกคนในการเรียนรู้ Node.js