欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺析Node.js實現(xiàn)HTTP文件下載

 更新時間:2016年08月05日 16:59:05   投稿:daisy  
本文介紹如何用Node.js來實現(xiàn)HTTP文件下載,文章以實例演示所以很詳細,有需要的小伙伴們可以參考學習。

前言

HTTP實現(xiàn)文件下載時,只要在服務器設置好相關響應頭,并使用二進制傳輸文件數(shù)據(jù)即可,而客戶端(瀏覽器)會根據(jù)響應頭接收文件數(shù)據(jù)。而在Node.js中,設置好響應頭后,讀取文件流,再使用“.pipe()”方法將流轉接到響應對象Response就可以實現(xiàn)一個簡單的文件下載服務器。

1. 文件下載介紹

HTTP基于請求頭和響應頭實現(xiàn)狀態(tài)交互,在得到服務器正確響應狀態(tài)后,而客戶端首先會解析響應頭,并根據(jù)響應頭來接收和展示數(shù)據(jù)(響應體)。對于文件下載來說,其實現(xiàn)過程如下:

    1.客戶端發(fā)起文件資源請求

    2.服務器查找對應文件,并設置”Content-Type”、”Content-Disposition”等響應頭,分別用于表示文件的”MIME”類型及文件描述

    3.客戶端根據(jù)服務器返回的響應頭解析和接收文件數(shù)據(jù)

需要設置的響應頭

設置文件下載響應頭時,除了常用的HTTP響應頭外,比較重要是還要設置以下兩個響應頭:

Content-Type: application/octet-stream
Content-Disposition: attachment; filename=MyFileName.ext

在上面的設置中,”Content-Type: application/octet-stream”告訴瀏覽器這是一個二進制文件,”Content-Disposition”告訴瀏覽器這是一個需要下載的附件并告訴瀏覽器默認的文件名。如果不添加”Content-Disposition”響應頭,瀏覽器可能會下載或顯示文件內容,不同瀏覽器的處理有所不同。

2. Node.js文件下載服務器實現(xiàn)

接下來我們基于Express 框架實現(xiàn)一個簡單文件下載服務器,在這個服務器中主要包括兩個功能:服務器文件的瀏覽文件的下載。

2.1 添加路由

創(chuàng)建Express應用后,添加如下兩個路由:

router.get('/files', function(req, res, next) {
 // 顯示服務器文件 
});
router.get('/file/:fileName', function(req, res, next) {
 // 實現(xiàn)文件下載 
});

上面的添加的兩個路由分別用于:顯示服務器文件、實現(xiàn)文件下載

2.2 顯示服務器文件

實現(xiàn)服務器文件的顯示,要通過”fs”模塊讀取文件目錄并進行文件/目錄檢查等。還需要使用”path”模塊處理文件路徑。首先引入這兩個模塊:

const fs = require('fs');
const path = require('path');

顯示服務器文件實現(xiàn)代碼如下:

router.get('/files', function(req, res, next) {
 // 顯示服務器文件 
 // 文件目錄
 var filePath = path.join(__dirname, './');
 fs.readdir(filePath, function(err, results){
  if(err) throw err;
  if(results.length>0) {
   var files = [];
   results.forEach(function(file){
   if(fs.statSync(path.join(filePath, file)).isFile()){
     files.push(file);
   }
   })
   res.render('files', {files:files});
  } else {
   res.end('當前目錄下沒有文件');
  }
 });
});

上面代碼中,讀取目錄后通過視圖文件”files.ejs”顯示可下載文件列表。其代碼如下:

<!DOCTYPE html>
<html>
 <head>
  <title>下載文件選擇</title>
 </head>
 <body>
  <h1>請選擇下載文件:</h1>
  <% if(files.length>0) {%>
  <ul>
   <% files.forEach(function(file){ %>
   <li>
    <a href="/file/<%- file %>" target="_blank"><%- file %></a>
   </li>
   <%})%>
  </ul>
  <%} else {%>
  <p>沒有可下載文件…</p>
  <%}%>
 </body>
</html>

2.3 實現(xiàn)文件下載

實現(xiàn)文件下載時,可以先讀取文件到一個”Buffer”中,再通過”res.send()”或”res.end()”方法發(fā)送文件數(shù)據(jù),也可以基于流(”Stream”)實現(xiàn)文件數(shù)據(jù)的發(fā)送。使用”Stream”實現(xiàn)文件下載時,可以使用”fs.createReadStream()”方法創(chuàng)建一個可讀流,而響應對象Response是一個可寫流。這樣,只需要通過”.pipe()”方法將文件流轉接到Response響應流中即可。

文件下載實現(xiàn)代碼如下:

router.get('/file/:fileName', function(req, res, next) {
 // 實現(xiàn)文件下載 
 var fileName = req.params.fileName;
 var filePath = path.join(__dirname, fileName);
 var stats = fs.statSync(filePath); 
 if(stats.isFile()){
  res.set({
   'Content-Type': 'application/octet-stream',
   'Content-Disposition': 'attachment; filename='+fileName,
   'Content-Length': stats.size
  });
  fs.createReadStream(filePath).pipe(res);
 } else {
  res.end(404);
 }
});

總結

以上就是利用Node.js實現(xiàn)HTTP文件下載的全部內容,希望對大家學習Node.js有所幫助。

相關文章

  • node.js調用C++函數(shù)的方法示例

    node.js調用C++函數(shù)的方法示例

    這篇文章主要介紹了node.js調用C++函數(shù)的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • Node.js開發(fā)靜態(tài)資源服務器

    Node.js開發(fā)靜態(tài)資源服務器

    這篇文章主要為大家介紹了Node.js開發(fā)靜態(tài)資源服務器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • NodeJS連接MySQL數(shù)據(jù)庫并進行增刪改查操作詳解

    NodeJS連接MySQL數(shù)據(jù)庫并進行增刪改查操作詳解

    本篇是使用NodeJS的模塊MySQL操作MySQL數(shù)據(jù)庫的基礎教程,連接MySQL數(shù)據(jù)庫并進行增刪改查操作詳解,需要的朋友可以參考下
    2024-02-02
  • Node.JS利用PhantomJs抓取網(wǎng)頁入門教程

    Node.JS利用PhantomJs抓取網(wǎng)頁入門教程

    現(xiàn)今,網(wǎng)頁抓取已經是一種人所共知的技術了,然而依然存在著諸多復雜性,下面這篇文章主要給大家介紹了Node.JS利用PhantomJs抓取網(wǎng)頁的方法教程,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-05-05
  • 淺談Koa服務限流方法實踐

    淺談Koa服務限流方法實踐

    本篇文章主要介紹了淺談Koa服務限流方法實踐,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • k8s node節(jié)點重新加入master集群的實現(xiàn)

    k8s node節(jié)點重新加入master集群的實現(xiàn)

    這篇文章主要介紹了k8s node節(jié)點重新加入master集群的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • 了不起的node.js讀書筆記之node的學習總結

    了不起的node.js讀書筆記之node的學習總結

    這篇文章主要介紹了了不起的node.js讀書筆記之node的學習總結,需要的朋友可以參考下
    2014-12-12
  • Nodejs基于Windows安裝步驟

    Nodejs基于Windows安裝步驟

    這篇文章主要介紹了Nodejs基于Windows安裝步驟,本文分步驟結合圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01
  • NodeJS學習筆記之網(wǎng)絡編程

    NodeJS學習筆記之網(wǎng)絡編程

    Node.js采用了Google Chrome瀏覽器的V8引擎,性能很好,同時還提供了很多系統(tǒng)級的API,如文件操作、網(wǎng)絡編程等。Node.js則是一個全面的后臺運行時,為Javascript提供了其他語言能夠實現(xiàn)的許多功能。今天我們來看下Nodejs的網(wǎng)絡編程
    2014-08-08
  • nodejs使用PassThrough流進行數(shù)據(jù)傳遞合并示例詳解

    nodejs使用PassThrough流進行數(shù)據(jù)傳遞合并示例詳解

    這篇文章主要為大家介紹了nodejs使用PassThrough流進行數(shù)據(jù)傳遞合并示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09

最新評論