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

js中base64與file之間的轉(zhuǎn)換方法

 更新時間:2023年09月05日 10:24:23   作者:憂郁的蛋~  
這篇文章主要給大家介紹了關(guān)于js中base64與file之間的轉(zhuǎn)換方法,最近項目中需要實現(xiàn)把圖片的base64編碼轉(zhuǎn)成file文件的功能,然后再上傳至服務(wù)器,需要的朋友可以參考下

一、base64轉(zhuǎn)為file

在 js中,可以使用 Blob 對象將 base64 字符串轉(zhuǎn)換為 File 對象。

方法一、base64 直接轉(zhuǎn)換為 File 對象:

首先, 需要從 base64 字符串中獲取文件類型, 然后將文件類型和 base64 字符串轉(zhuǎn)換為 Blob 對象。最后, 使用 Blob 對象構(gòu)造函數(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 });
}

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

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

方法二、base64 先轉(zhuǎn)換為 Blob,再由 Blob 轉(zhuǎn)換為 File:

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

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

1、先將 base64 轉(zhuǎn)換為 Blob:

// 將 base64 轉(zhuǎn)換為 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,
  });
}

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

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

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

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

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

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

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

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

2、再將 Blob 轉(zhuǎn)換為 File:

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

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

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

二、File => base64

方法一、File 直接轉(zhuǎn)換為 base64:

使用 FileReader 對象將 File 對象轉(zhuǎn)換為 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ù)據(jù)轉(zhuǎn)換為 base64 編碼的字符串
      const base64String = reader.result.split(",")[1];
      // 解析為 Promise 對象,并返回 base64 編碼的字符串
      resolve(base64String);
    };
    // 加載失敗時
    reader.onerror = function () {
      reject(new Error("Failed to load file"));
    };
  });
}

方法二、File 先轉(zhuǎn)換為 Blob,再由 Blob 轉(zhuǎn)換為 base64:

1、先將 File 轉(zhuǎn)換為 Blob:

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

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

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

2、再將 Blob 轉(zhuǎn)換為 base64:

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

以下是一個將 Blob 對象轉(zhuǎn)換為 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ù)內(nèi)部,創(chuàng)建了一個 FileReader 對象,并調(diào)用其 readAsDataURL 方法將 Blob 對象讀取為 DataURL。在讀取完成后,我們使用 Promise 對象的 resolve 方法將 DataURL 中的 base64 字符串提取出來并返回。如果讀取過程中出現(xiàn)錯誤,則使用 reject 方法拒絕 Promise 對象。

總結(jié)

到此這篇關(guān)于js中base64與file之間的轉(zhuǎn)換方法的文章就介紹到這了,更多相關(guān)js base64與file轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 微信小程序?qū)崿F(xiàn)通過js操作wxml的wxss屬性示例

    微信小程序?qū)崿F(xiàn)通過js操作wxml的wxss屬性示例

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)通過js操作wxml的wxss屬性,結(jié)合實例形式分析了微信小程序使用js操作wxml的wxss屬性相關(guān)原理、實現(xiàn)技巧與操作注意事項,需要的朋友可以參考下
    2018-12-12
  • 每個 JavaScript 工程師都應(yīng)懂的33個概念

    每個 JavaScript 工程師都應(yīng)懂的33個概念

    這個項目是為了幫助開發(fā)者掌握 JavaScript 概念而創(chuàng)立的。它不是必備,但在未來學(xué)習(xí)( JavaScript )中,可以作為一篇指南,需要的朋友可以參考下
    2018-10-10
  • JAVASCRIPT下判斷IE與FF的比較簡單的方式

    JAVASCRIPT下判斷IE與FF的比較簡單的方式

    在JAVASCRIPT當(dāng)中可以通過取當(dāng)前瀏覽器返回值來判斷當(dāng)前使用什么瀏覽器。
    2008-10-10
  • 如何在一個頁面顯示多個百度地圖

    如何在一個頁面顯示多個百度地圖

    經(jīng)常有人問,百度地圖JavaScript API能在同一頁面顯示多個地圖嗎?當(dāng)然可以啊,為什么不可以呢?地圖之于頁面無非就是個div,我們可以在頁面顯示多個div,自然也可以顯示多個地圖。
    2013-04-04
  • javascript設(shè)計模式 – 中介者模式原理與用法實例分析

    javascript設(shè)計模式 – 中介者模式原理與用法實例分析

    這篇文章主要介紹了javascript設(shè)計模式 – 中介者模式,結(jié)合實例形式分析了javascript中介者模式基本概念、原理、用法及操作注意事項,需要的朋友可以參考下
    2020-04-04
  • 通用于ie和firefox的函數(shù) GetCurrentStyle (obj, prop)

    通用于ie和firefox的函數(shù) GetCurrentStyle (obj, prop)

    通用于ie和firefox的函數(shù) GetCurrentStyle (obj, prop)...
    2006-12-12
  • 詳解Howler.js Web音頻播放終極解決方案

    詳解Howler.js Web音頻播放終極解決方案

    這篇文章主要介紹了詳解Howler.js Web音頻播放終極解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • JavaScript版TAB選項卡效果實例

    JavaScript版TAB選項卡效果實例

    tab選項卡效果就是當(dāng)我指上或經(jīng)過時就會顯示這個選項卡下面的內(nèi)容,下面我來給大家介紹一款純js實現(xiàn)的TAB選項卡效果,有需要的朋友可以參考一下
    2013-08-08
  • 用POSTMAN發(fā)送JSON格式的POST請求示例

    用POSTMAN發(fā)送JSON格式的POST請求示例

    這篇文章主要介紹了用POSTMAN發(fā)送JSON格式的POST請求示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • 微信小程序如何使用云開發(fā)

    微信小程序如何使用云開發(fā)

    這篇文章主要為大家詳細(xì)介紹了微信小程序如何使用云開發(fā),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05

最新評論