亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

前端實現(xiàn)文件下載的4種常見方式與實戰(zhàn)示例

 更新時間:2025年04月16日 08:34:03   作者:阿達C  
在前端開發(fā)中,實現(xiàn)文件下載是一個非常常見的需求,本篇文章將介紹 4 種前端文件下載的方式,并提供詳細示例,希望能幫助大家掌握文件下載的各種技巧

引言

在前端開發(fā)中,實現(xiàn)文件下載是一個非常常見的需求,例如:

  • 下載圖片、PDF、Excel 等文件
  • 將前端生成的數(shù)據導出為文件(如 JSON、CSV、Excel)
  • 使用 Blob、Data URL、Stream 方式進行下載

本篇文章將介紹 4 種前端文件下載的方式,并提供詳細示例,幫助你掌握文件下載的各種技巧。

1. 直接使用 <a> 標簽下載(適用于靜態(tài)文件)

原理

HTML <a> 標簽的 download 屬性可以直接下載鏈接文件,無需 JavaScript 處理。

示例:下載本地文件

<a href="/files/example.pdf" rel="external nofollow"  download="example.pdf">下載 PDF 文件</a>

說明:

  • href="/files/example.pdf" 指向文件路徑
  • download="example.pdf" 指定下載時的文件名稱

示例:下載網絡圖片

<a  rel="external nofollow"  download="my-image.jpg">下載圖片</a>

注意:

  • 僅適用于同源文件
  • 跨域文件 需要服務器支持 Access-Control-Allow-Origin

2. 使用 JavaScript Blob 方式下載文件

原理

Blob(二進制大對象)可以用來存儲二進制數(shù)據,并創(chuàng)建可下載的 URL。

示例:下載文本文件

function downloadTextFile() {
    const content = "Hello, this is a text file!";
    const blob = new Blob([content], { type: "text/plain" }); // 創(chuàng)建 Blob
    const url = URL.createObjectURL(blob); // 生成臨時 URL

    const a = document.createElement("a");
    a.href = url;
    a.download = "example.txt"; // 設置下載文件名
    document.body.appendChild(a);
    a.click(); // 觸發(fā)下載
    document.body.removeChild(a);
    URL.revokeObjectURL(url); // 釋放 URL
}

downloadTextFile();

適用場景:前端生成文件,如文本、JSON、CSV、HTML。

3. 使用 fetch 下載文件(適用于后端 API 提供的文件)

原理

使用 fetch() 請求文件,并將其轉換為 Blob 進行下載。

示例:下載后端提供的文件

async function downloadFileFromServer(url, filename) {
    const response = await fetch(url);
    const blob = await response.blob(); // 將響應轉換為 Blob

    const a = document.createElement("a");
    a.href = URL.createObjectURL(blob);
    a.download = filename;
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
    URL.revokeObjectURL(a.href);
}

// 調用示例
downloadFileFromServer("https://example.com/report.pdf", "report.pdf");

適用場景:

  • 后端提供的文件下載
  • Excel、PDF、圖片等二進制文件

4. 使用 canvas 生成圖片并下載

原理

canvas.toBlob() 可以將 canvas 畫布轉換為 Blob,然后使用 URL.createObjectURL() 進行下載。

示例:下載 canvas 生成的圖片

<canvas id="myCanvas" width="200" height="200"></canvas>
<button onclick="downloadCanvas()">下載圖片</button>

<script>
function downloadCanvas() {
    const canvas = document.getElementById("myCanvas");
    const ctx = canvas.getContext("2d");

    // 畫一個紅色矩形
    ctx.fillStyle = "red";
    ctx.fillRect(50, 50, 100, 100);

    // 將 canvas 轉換為 Blob 并下載
    canvas.toBlob(blob => {
        const url = URL.createObjectURL(blob);
        const a = document.createElement("a");
        a.href = url;
        a.download = "canvas-image.png";
        document.body.appendChild(a);
        a.click();
        document.body.removeChild(a);
        URL.revokeObjectURL(url);
    }, "image/png");
}
</script>

適用場景:截圖、繪圖工具、導出 canvas 生成的圖像。

5. 額外優(yōu)化:進度顯示 & 大文件下載

對于 大文件下載,可以使用 ReadableStream 進行流式下載,并顯示進度。

示例:下載大文件并顯示進度

async function downloadLargeFile(url, filename) {
    const response = await fetch(url);
    const reader = response.body.getReader();
    const contentLength = +response.headers.get("Content-Length");

    let receivedLength = 0;
    let chunks = [];

    while (true) {
        const { done, value } = await reader.read();
        if (done) break;
        chunks.push(value);
        receivedLength += value.length;
        console.log(`下載進度:${((receivedLength / contentLength) * 100).toFixed(2)}%`);
    }

    const blob = new Blob(chunks);
    const a = document.createElement("a");
    a.href = URL.createObjectURL(blob);
    a.download = filename;
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
    URL.revokeObjectURL(a.href);
}

// 調用示例
downloadLargeFile("https://example.com/large-file.zip", "large-file.zip");

適用場景:大文件下載、斷點續(xù)傳、流式處理。

6. 前端下載文件的最佳實踐

方法適用場景優(yōu)點缺點
<a> 標簽靜態(tài)文件簡單易用僅適用于同源文件
Blob + URL.createObjectURL()前端生成文件適用于所有文件類型需手動釋放 URL
fetch() 方式API 提供的文件下載適用于二進制數(shù)據需處理 CORS 問題
canvas.toBlob()生成圖片并下載適用于 canvas僅適用于 canvas 內容
流式下載 (ReadableStream)大文件、進度控制適合斷點續(xù)傳代碼復雜

結論

前端實現(xiàn)文件下載的方式多種多樣,選擇合適的方式取決于 文件來源 和 下載需求:

靜態(tài)文件:使用 <a> 標簽的 download 屬性(簡單易用)

動態(tài)生成文件:使用 Blob + URL.createObjectURL()

從服務器下載文件:使用 fetch() 請求文件并轉換為 Blob

大文件或流式下載:使用 ReadableStream 進行分塊處理

到此這篇關于前端實現(xiàn)文件下載的4種常見方式與實戰(zhàn)示例的文章就介紹到這了,更多相關前端文件下載方式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 微信小程序實現(xiàn)image組件圖片自適應寬度比例顯示的方法

    微信小程序實現(xiàn)image組件圖片自適應寬度比例顯示的方法

    這篇文章主要介紹了微信小程序實現(xiàn)image組件圖片自適應寬度比例顯示的方法,簡單講述了image組件的常用屬性,并結合實例形式分析了微信小程序實現(xiàn)圖片自適應寬度比例的相關操作技巧,需要的朋友可以參考下
    2018-01-01
  • JS FormData上傳文件的設置方法

    JS FormData上傳文件的設置方法

    使用FormData上傳文件時,總是獲取不到req.file對象。發(fā)現(xiàn)是沒有配置對FormData導致的,怎么解決這個問題呢?下面小編給大家?guī)砹薐S FormData上傳文件的設置方法,需要的朋友參考下吧
    2017-07-07
  • 微信小程序調用騰訊地圖API文檔JavaScript?SDK和WebService?API詳細解讀

    微信小程序調用騰訊地圖API文檔JavaScript?SDK和WebService?API詳細解讀

    本文介紹了如何使用騰訊位置服務,包括申請開發(fā)者密鑰、獲取小程序APPID、下載地圖SDK、設置服務器域名白名單等步驟,詳細說明了如何在微信小程序中集成騰訊位置服務,進行地圖展示和周邊搜索等功能的實現(xiàn),同時提醒注意API的調用次數(shù)和權限限制,需要的朋友可以參考下
    2024-09-09
  • javascript顯示中文日期的方法

    javascript顯示中文日期的方法

    這篇文章主要介紹了javascript顯示中文日期的方法,涉及javascript針對日期與字符串操作技巧,需要的朋友可以參考下
    2015-06-06
  • Javascript將數(shù)字轉化成為貨幣格式字符串

    Javascript將數(shù)字轉化成為貨幣格式字符串

    這篇文章主要介紹Javascript將數(shù)字轉化成為貨幣格式字符串的方法,通俗易懂,需要的朋友可以參考下。
    2016-06-06
  • js中使用replace方法完成某個字符的轉換

    js中使用replace方法完成某個字符的轉換

    這篇文章主要介紹了js中使用replace方法完成某個字符的轉換,比較實用,需要的朋友可以參考下
    2014-08-08
  • JavaScript中的10個常見錯誤及解決方法

    JavaScript中的10個常見錯誤及解決方法

    JavaScript 作為最流行的編程語言之一,為絕大多數(shù)網站和應用提供動力,然而,其靈活性和動態(tài)特性有時會導致常見錯誤,本文將探討 JavaScript 中的 10 個常見錯誤,并提供相應的解決方案,需要的朋友可以參考下
    2024-09-09
  • 詳解javaScript中Number數(shù)字類型的使用

    詳解javaScript中Number數(shù)字類型的使用

    Number和Math都屬于JavaScript中的內置對象,Number數(shù)字類型作為基礎數(shù)據類型,我們在開發(fā)過程中會經常用到,包括數(shù)字精度的格式化,還有字符串轉換成數(shù)字等操作。本文將詳細講解其用法,感興趣的可以了解一下
    2022-04-04
  • JavaScript解決單線程缺陷webWorker問題

    JavaScript解決單線程缺陷webWorker問題

    Web Worker 為 Web 內容在后臺線程中運行腳本提供了一種簡單的方法,本文給大家介紹JavaScript解決單線程缺陷——webWorker,需要的朋友可以參考下
    2023-06-06
  • 基于javascript實現(xiàn)listbox左右移動

    基于javascript實現(xiàn)listbox左右移動

    這篇文章主要介紹了基于javascript實現(xiàn)listbox左右移動的相關資料,以一個完整的實例代碼分析了js實現(xiàn)listbox左右移動的相關技巧,感興趣的小伙伴們可以參考一下
    2016-01-01

最新評論