最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript base64 與 File 之間的互轉(操作方法)

 更新時間:2024年05月29日 15:21:19   作者:飛仔FeiZai  
在JavaScript 中,可以使用 Blob 對象將 base64 字符串轉換為 File 對象,這篇文章主要介紹了JavaScript base64 與 File之間的互轉,需要的朋友可以參考下

JavaScript base64 與 File 之間的互轉

一、base64 => File

在 JavaScript 中,可以使用 Blob 對象將 base64 字符串轉換為 File 對象。

方法一、base64 直接轉換為 File 對象:

首先, 需要從 base64 字符串中獲取文件類型, 然后將文件類型和 base64 字符串轉換為 Blob 對象。最后, 使用 Blob 對象構造函數(shù)創(chuàng)建一個 File 對象。

下面是一個示例函數(shù),它接收一個 base64 字符串和文件名,并返回一個 File 對象:

function base64ToFile(base64, fileName) {
  let arr = base64.split(",");
  let mime = arr[0].match(/:(.\*?);/)[1];
  let bstr = atob(arr[1]);
  let n = bstr.length;
  let u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  return new File([u8arr], fileName, { type: mime });
}

需要注意的是, atobUint8Array 是在所有現(xiàn)代瀏覽器中都可用的。在舊瀏覽器中,需要使用其它庫來替代這兩個函數(shù)。

如果需要在使用這個函數(shù)之前檢查文件類型是否支持,可以在函數(shù)中增加文件類型校驗的代碼。

方法二、base64 先轉換為 Blob,再由 Blob 轉換為 File:

在 JavaScript 中,可以使用 Blob 對象將 base64 字符串轉換為二進制數(shù)據對象 Blob。

首先,使用 atob() 函數(shù)將 base64 字符串解碼為二進制字符串。然后,使用 Uint8Array 構造函數(shù)將二進制字符串轉換為字節(jié)數(shù)組。最后,使用 Blob 構造函數(shù),將字節(jié)數(shù)組作為第一個參數(shù),創(chuàng)建一個新的 Blob 對象。

1、先將 base64 轉換為 Blob:

// 將 base64 轉換為 Blob
function base64ToBlob(base64) {
  var arr = base64.split(","),
    mime = arr[0].match(/:(.\*?);/)[1],
    bstr = atob(arr[1]),
    n = bstr.length,
    u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  return new Blob([u8arr], {
    type: mime,
  });
}

使用類似這樣的方式構造出來的 Blob 對象就可以按照二進制文件的方式來使用,可以作為參數(shù)傳入 FileReader, 通過 FormData 對象上傳到服務器等。

需要注意的是, atob 和 Uint8Array 是在所有現(xiàn)代瀏覽器中都可用的。在舊瀏覽器中,需要使用其它庫來替代這兩個函數(shù)。

如果需要在使用這個函數(shù)之前檢查文件類型是否支持,可以在函數(shù)中增加文件類型校驗的代碼。

另外,在 HTML5 中,可以使用 canvas 元素的 toBlob()方法 將圖片轉換為 Blob 對象,這個方法是基于 HTMLCanvasElement 元素的, 可以將一張圖片轉成 base64 后,再使用 canvas 的方法將圖片繪制在 canvas 元素上,然后使用 toBlob() 方法獲取到 Blob 對象。

還有一些第三方庫,比如 FileSaver.js, 可以使用它來將 Blob 對象保存在本地。

這些方法都能達到相同的目的,可以根據項目中使用的 JavaScript 環(huán)境和需要的復雜度來進行選擇

在 JavaScript 中,可以使用 File 構造函數(shù)將一個 Blob 對象轉換為一個 File 對象。

這個構造函數(shù)接收兩個參數(shù): 第一個參數(shù)是一個 Blob 或者 ArrayBuffer 對象,第二個參數(shù)是文件的名字。

2、再將 Blob 轉換為 File:

function blobToFile(blob, fileName) {
  return new File([blob], fileName);
}

由于 Blob 是 File 的超集, 所以可以直接將 Blob 對象轉換為 File 對象, 這樣就可以使用 File 對象的各種方法,例如獲取文件名、類型等。

由于這個是新的 API, 可能在部分瀏覽器上不能使用, 也可以使用第三方庫來兼容在舊瀏覽器上使用。

二、File => base64

方法一、File 直接轉換為 base64:

使用 FileReader 對象將 File 對象轉換為 base64 編碼的字符串。以下是一個簡單的 JavaScript 代碼示例:

function fileToBase64(file) {
  return new Promise((resolve, reject) => {
    // 創(chuàng)建一個新的 FileReader 對象
    const reader = new FileReader();
    // 讀取 File 對象
    reader.readAsDataURL(file);
    // 加載完成后
    reader.onload = function () {
      // 將讀取的數(shù)據轉換為 base64 編碼的字符串
      const base64String = reader.result.split(",")[1];
      // 解析為 Promise 對象,并返回 base64 編碼的字符串
      resolve(base64String);
    };
    // 加載失敗時
    reader.onerror = function () {
      reject(new Error("Failed to load file"));
    };
  });
}

方法二、File 先轉換為 Blob,再由 Blob 轉換為 base64:

1、先將 File 轉換為 Blob:

File 對象本身就是一種特殊類型的 Blob 對象,因此將 File 轉換為 Blob 可以直接使用 File 對象。

如果需要將 Blob 對象轉換為另一種 Blob 對象,可以使用 Blob 構造函數(shù),將原始 Blob 對象作為參數(shù)傳遞,然后使用新構造出來的 Blob 對象進行操作。以下是一個將 File 對象轉換為 Blob 對象的示例代碼:

function fileToBlob(file) {
  return new Blob([file], { type: file.type });
}

2、再將 Blob 轉換為 base64:

可以使用 FileReader 對象讀取 Blob 數(shù)據并轉換為 DataURL。Data URL 是一種基于 Base64 編碼的 URL 方案,可以用于在網頁中嵌入圖片或其他資源。

以下是一個將 Blob 對象轉換為 base64 字符串的示例代碼:

function blobToBase64(blob) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.readAsDataURL(blob);
    reader.onloadend = () => resolve(reader.result.split(",")[1]);
    reader.onerror = reject;
  });
}

上述代碼中的 blobToBase64 函數(shù)接收一個 Blob 對象作為參數(shù),并返回一個 Promise 對象,該 Promise 對象最終返回一個 base64 字符串。在函數(shù)內部,創(chuàng)建了一個 FileReader 對象,并調用其 readAsDataURL 方法將 Blob 對象讀取為 DataURL。在讀取完成后,我們使用 Promise 對象的 resolve 方法將 DataURL 中的 base64 字符串提取出來并返回。如果讀取過程中出現(xiàn)錯誤,則使用 reject 方法拒絕 Promise 對象。

到此這篇關于JavaScript base64 與 File 之間的互轉的文章就介紹到這了,更多相關JavaScript base64 與 File互轉內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • idea中提示Class 'xxx' is never used的解決

    idea中提示Class 'xxx' is never us

    這篇文章主要介紹了idea中提示Class 'xxx' is never used的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Springboot中的異步任務執(zhí)行及監(jiān)控詳解

    Springboot中的異步任務執(zhí)行及監(jiān)控詳解

    這篇文章主要介紹了Springboot中的異步任務執(zhí)行及監(jiān)控詳解,除了自己實現(xiàn)線程外,springboot本身就提供了通過注解的方式,進行異步任務的執(zhí)行,下面主要記錄一下,在Springboot項目中實現(xiàn)異步任務,以及對異步任務進行封裝監(jiān)控,需要的朋友可以參考下
    2023-10-10
  • Eclipse 使用Maven構建SpringMVC項目

    Eclipse 使用Maven構建SpringMVC項目

    本文主要介紹在Eclipse下創(chuàng)建Maven項目構建SpringMVC框架的過程,講解的比較詳細,需要的朋友可以參考下。
    2016-06-06
  • Java實現(xiàn)配置加載機制

    Java實現(xiàn)配置加載機制

    這篇文章主要介紹了Java實現(xiàn)配置加載機制的相關資料,需要的朋友可以參考下
    2016-01-01
  • @RequestMapping對不同參數(shù)的接收方式示例詳解

    @RequestMapping對不同參數(shù)的接收方式示例詳解

    Spring?MVC框架中,@RequestMapping注解用于映射URL到控制器方法,不同的參數(shù)類型如簡單參數(shù)、實體參數(shù)、數(shù)組參數(shù)、集合參數(shù)、日期參數(shù)和JSON參數(shù),本文給大家介紹@RequestMapping對不同參數(shù)的接收方式,感興趣的朋友一起看看吧
    2024-10-10
  • Java導致ConcurrentModificationException所有原因

    Java導致ConcurrentModificationException所有原因

    ConcurrentModificationException是Java集合框架拋出的運行時異常,表示集合在遍歷過程中被結構性修改了,導致迭代器無法保證一致性,下面就來介紹一下幾種原因,感興趣的可以了解一下
    2026-01-01
  • 基于Java中UDP的廣播形式(實例講解)

    基于Java中UDP的廣播形式(實例講解)

    下面小編就為大家分享一篇基于Java中UDP的廣播形式(實例講解),具有很好的參考價值,希望對大家有所幫助
    2017-12-12
  • SpringBoot定制化Starter實現(xiàn)方法

    SpringBoot定制化Starter實現(xiàn)方法

    小伙伴們曾經可能都經歷過整天寫著CURD的業(yè)務,都沒寫過一些組件相關的東西,這篇文章記錄一下SpringBoot如何自定義一個Starter。原理和理論就不用多說了,可以在網上找到很多關于該方面的資料,這里主要分享如何自定義
    2023-01-01
  • Java自旋鎖及自旋的好處詳解

    Java自旋鎖及自旋的好處詳解

    這篇文章主要介紹了Java自旋鎖及自旋的好處詳解,自旋就是自己在這里不停地循環(huán),直到目標達成,而不像普通的鎖那樣,如果獲取不到鎖就進入阻塞,需要的朋友可以參考下
    2023-10-10
  • JavaEE之SpringBoot日志使用及說明

    JavaEE之SpringBoot日志使用及說明

    文章介紹了日志的定義、作用、使用方法、日志框架、日志級別、日志配置以及使用注解@Slf4j簡化日志打印的過程
    2026-01-01

最新評論

广宗县| 阜阳市| 理塘县| 松潘县| 义乌市| 榕江县| 侯马市| 资中县| 舟山市| 海晏县| 大厂| 玛多县| 徐州市| 乐都县| 高邮市| 大方县| 尼勒克县| 阜南县| 秭归县| 临江市| 招远市| 乐业县| 石渠县| 黄平县| 凤冈县| 博湖县| 射阳县| 永嘉县| 鄄城县| 合阳县| 离岛区| 平邑县| 富民县| 泸州市| 田林县| 沙雅县| 文安县| 大港区| 阿合奇县| 阿勒泰市| 新龙县|