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

JavaScript實現下載base64數據并兼容低版本

 更新時間:2024年12月26日 08:48:28   作者:Code_Geo  
這篇文章主要為大家詳細介紹了如何使用JavaScript實現下載base64數據并兼容低版本,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

詳細步驟如下

1、解析 Base64 數據:

如果數據流中包含前綴 data:…;base64,,先分離 MIME 類型和 Base64 數據部分。

如果沒有前綴,假設默認 MIME 類型(如 application/octet-stream)。

2、Base64 解碼:

使用 atob 將 Base64 字符串解碼為二進制字符串。

將二進制字符串轉為 Uint8Array。

3、生成 Blob:

將二進制數據創(chuàng)建為 Blob 對象,指定類型(如 text/plain)。

4、觸發(fā)下載:

使用 URL.createObjectURL 創(chuàng)建 Blob 對象的臨時 URL。

動態(tài)創(chuàng)建 元素,設置其 href 屬性為臨時 URL,指定文件名,觸發(fā)點擊事件下載。

5、清理臨時資源:

下載完成后,移除 元素并釋放臨時 URL。

實現代碼如下:

function downloadBase64Data(base64Data, fileName) {
  try {
    // 檢查 Base64 數據是否包含前綴(如 data:...;base64,)
    let mimeType = '';
    let base64String = '';

    if (base64Data.includes(',')) {
      const [metadata, data] = base64Data.split(',');
      mimeType = metadata.match(/:(.*?);/)[1]; // 提取 MIME 類型
      base64String = data; // 僅取 Base64 數據部分
    } else {
      // 如果沒有前綴,默認為某種 MIME 類型,例如 application/octet-stream
      mimeType = 'application/octet-stream';
      base64String = base64Data;
    }

    // Base64 解碼
    const binaryString = atob(base64String); // 解碼 Base64
    const binaryData = new Uint8Array(binaryString.length);
    for (let i = 0; i < binaryString.length; i++) {
      binaryData[i] = binaryString.charCodeAt(i);
    }

    // 創(chuàng)建 Blob 對象
    const blob = new Blob([binaryData], { type: mimeType });

    // 使用 Blob 創(chuàng)建臨時 URL
    const url = URL.createObjectURL(blob);

    // 創(chuàng)建 <a> 元素并觸發(fā)下載
    const a = document.createElement('a');
    a.href = url;
    a.download = fileName;
    document.body.appendChild(a); // 必須將其添加到 DOM 中
    a.click();

    // 清理
    document.body.removeChild(a);
    URL.revokeObjectURL(url);

    console.log('文件下載成功');
  } catch (error) {
    console.error('下載失敗:', error.message);
  }
}

// 示例用法
const base64Data = 'data:text/plain;base64,SGVsbG8sIFdvcmxkIQ=='; // 示例 Base64 數據
const fileName = 'example.txt';
downloadBase64Data(base64Data, fileName);

優(yōu)勢

無 API 依賴:適合直接處理純 Base64 數據流。

兼容性高:支持現代瀏覽器(Chrome、Firefox、Edge)。

注意事項

文件名:確保 fileName 是用戶友好的文件名,并包含擴展名。

性能問題:對于較大的 Base64 數據,內存占用會較高。

安全性:確保 Base64 數據可信,避免處理惡意輸入。

到此這篇關于JavaScript實現下載base64數據并兼容低版本的文章就介紹到這了,更多相關JavaScript下載base64數據內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • js實現基于正則表達式的輕量提示插件

    js實現基于正則表達式的輕量提示插件

    這篇文章主要介紹了基于正則表達式的輕量提示插件,兼容性強卻文件輕巧的文本框檢測插件,推薦給大家,有需要的小伙伴可以參考下。
    2015-08-08
  • 15款最好的Bootstrap在線編輯器

    15款最好的Bootstrap在線編輯器

    這篇文章主要為大家詳細介紹了15款最好的Bootstrap在線編輯器,15款在線編輯工具希望幫助大家更好的進行開發(fā),感興趣的小伙伴們可以參考一下
    2016-08-08
  • js 動態(tài)給元素添加、移除事件的實現方法

    js 動態(tài)給元素添加、移除事件的實現方法

    下面小編就為大家?guī)硪黄猨s 動態(tài)給元素添加、移除事件的實現方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • node.js使用nodemailer發(fā)送郵件實例

    node.js使用nodemailer發(fā)送郵件實例

    這篇文章主要介紹了node.js使用nodemailer發(fā)送郵件的方法,例子中使用的是QQ郵箱,你也可以修改成其它的郵箱如163、gmail等,需要的朋友可以參考下
    2014-03-03
  • 關于javascript event flow 的一個bug詳解

    關于javascript event flow 的一個bug詳解

    描述了firefox,safari 有一個bug和DOM 3 規(guī)范不一致:在event.currentTarget等于event.target的時候(即event flow處于target phase時),會調用添加到currentTarget上的useCapture為true的listener
    2013-09-09
  • js實現自動輪換選項卡

    js實現自動輪換選項卡

    這篇文章主要為大家詳細介紹了js實現自動輪換選項卡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • IE6/7/8中Option元素未設value時Select將獲取空字符串

    IE6/7/8中Option元素未設value時Select將獲取空字符串

    可以看到當忘記寫option的value時這些現代瀏覽器都會盡量返回正確的(客戶端程序員想要的)結果value,其容錯性比IE6/7/8做的更好。
    2011-04-04
  • js判斷兩個數組是否存在相同元素的四種方法

    js判斷兩個數組是否存在相同元素的四種方法

    這篇文章主要給大家介紹了關于js判斷兩個數組是否存在相同元素的四種方法,js中是不能直接用==或者===來計算兩個數組是否相等的,那么就需要對數組的值進行比較,需要的朋友可以參考下
    2023-07-07
  • JavaScript必看的10道面試題總結(推薦)

    JavaScript必看的10道面試題總結(推薦)

    JavaScript 已經成為全棧開發(fā)技能的基石,在全棧開發(fā)面試中都會不可避免地涉及到與 JavaScript 有關的問題。這篇文章主要給大家介紹了關于JavaScript必看的10道面試題,需要的朋友可以參考下
    2021-05-05
  • javascript 深拷貝

    javascript 深拷貝

    突然問起我以前的函數,我也會愣一下,心想,真爛!我總是喜歡把最好的東西分享給大家的,以前的大家忘掉吧。
    2010-03-03

最新評論