基於axios 將網路圖片地址轉換為file對象

来源:https://www.cnblogs.com/cs-songbai/p/18275977
-Advertisement-
Play Games

★ 背景說明 在瀏覽器環境中,由於安全性限制,不能直接將網路圖片地址轉換成 File 對象。File 對象是用戶在客戶端上傳文件時才能創建的,而不能由前端代碼直接將網路圖片地址轉換成 File 對象。 ★ 解決方案 如果你想要將網路圖片地址轉換成 Fie 對象,你需要先將圖片下載到客戶端,然後再將其 ...


★ 背景說明

在瀏覽器環境中,由於安全性限制,不能直接將網路圖片地址轉換成 File 對象。File 對象是用戶在客戶端上傳文件時才能創建的,而不能由前端代碼直接將網路圖片地址轉換成 File 對象。

★ 解決方案

如果你想要將網路圖片地址轉換成 Fie 對象,你需要先將圖片下載到客戶端,然後再將其轉換為 File 對象。這可以通過以下步驟完成:
1. 使用 Axios(或其他網路請求庫)下載圖片數據。
2. 將下載的數據轉換成 Blob 對象。
3. 創建一個新的 File 對象,將 Blob 對象放入其中。

★ 功能封裝

// 將網路圖片地址轉換為File對象
async function imageUrlToFile(url, fileName) {
  try {
    // 第一步:使用axios獲取網路圖片數據
    const response = await axios.get(url, { responseType: 'arraybuffer' })
    const imageData = response.data

    // 第二步:將圖片數據轉換為Blob對象
    const blob = new Blob([imageData], {
      type: response.headers['content-type']
    })

    // 第三步:創建一個新的File對象
    const file = new File([blob], fileName, { type: blob.type })

    return file
  } catch (error) {
    console.error('將圖片轉換為File對象時發生錯誤:', error)
    throw error
  }
}

★ 代碼示例

<!doctype html>
<html>
<head>
    <title>網路圖片地址轉換為File對象</title>
</head>
<body>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
    /*
    關於在script中使用await的語句報錯的解決說明:
        commonjs規範無法像ES模塊直接使用頂層await,必須搭配async關鍵字使用
    解決辦法: 將使用await的語句,用 (async () =>())() 的自執行函數包裹起來
        (async () => {
          const config = {...}
          await esbuild.context(config);
        })();
    */
    (async () => {
        // 將網路圖片地址轉換為File對象
        async function imageUrlToFile(url, fileName) {
            try {
                // 第一步:使用axios獲取網路圖片數據
                const response = await axios.get(url, {responseType: 'arraybuffer'})
                const imageData = response.data

                // 第二步:將圖片數據轉換為Blob對象
                const blob = new Blob([imageData], {
                    type: response.headers['content-type']
                })

                // 第三步:創建一個新的File對象
                const file = new File([blob], fileName, {type: blob.type})

                return file
            } catch (error) {
                console.error('將圖片轉換為File對象時發生錯誤:', error)
                throw error
            }
        }

        const imgUrl = 'https://gips3.baidu.com/it/u=3886271102,3123389489&fm=3028&app=3028&f=JPEG&fmt=auto?w=1280&h=960'
        const file = await imageUrlToFile(imgUrl, 'girl')
        // URL.createObjectURL(file) 將文件對象轉換為本地預覽的地址進行預覽
        const fileUrl = URL.createObjectURL(file)
        console.log(file, fileUrl)
    })()
</script>
</body>
</html>

★ 結果分析

File {name: 'girl', lastModified: 1719682659397, lastModifiedDate: Sun Jun 30 2024 01:37:39 GMT+0800 (中國標準時間), webkitRelativePath: '', size: 185786, …}
blob:http://localhost:63342/27225c8a-56f2-45a6-9c7d-54468d9b8758'

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、初始化 -(JXCategoryTitleView *)categoryView{ if (!_categoryView) { _categoryView = [[JXCategoryTitleView alloc] init]; _categoryView.delegate = self; _ ...
  • 摘要:文章闡述了Nuxt3中Nitro生命周期鉤子的使用,如nitro:config自定義配置、nitro:init註冊構建鉤子、nitro:build:before/after調整構建設置及處理公共資產、prerender:routes擴展預渲染路由、build:error捕獲構建錯誤,通過示例代... ...
  • ‍ 寫在開頭 點贊 + 收藏 學會 後端:密碼得走密文哇! 我:base64?md5? 後端:這次不行哇,新來的測試不好糊弄呢!必須要國密sm2加密捏 我: 好吧,看我的。 我這邊使用的是sm-crypto,當然也有很多優秀的庫如:forge,我在業務上搭配jszip做過上傳zi ...
  • 今天我們來學習一個有意思的多行文本輸入打字效果,像是這樣: 這個效果其實本身並非特別困難,實現的方式也很多,在本文中,我們更多的會聚焦於整個多行打字效果最後的動態游標的實現。 也就是如何在文本不斷變長,在不確定行數的情況下,讓文字的最末行右側處,一直有一個不斷閃爍的游標效果: 單行文本打字效果 在此 ...
  • ★ 將File對象轉換為URL的兩種方式 方式一. URL.createObjectURL(object) 返回了一個DOMString包含了一個對象URL,該URL可用於指定源 object的內容。其參數為用於創建 URL 的File 對象、Blob 對象或者 MediaSource 對象。​ 方 ...
  • JavaScript 是一種弱類型語言,開發者經常需要判斷變數的數據類型。本文介紹了 typeof、instanceof、Object.prototype.toString.call 等常用的判斷方法,並討論了 typeof null 返回 object 的歷史原因。此外,還涵蓋瞭如何判斷箭頭函數、... ...
  • 零:前端目前形勢 前端的發展史 HTML(5)、CSS(3)、JavaScript(ES5、ES6):編寫一個個的頁面 -> 給後端(PHP、Python、Go、Java) -> 後端嵌入模板語法 -> 後端渲染完數據 -> 返回數據給前端 -> 在瀏覽器中查看 Ajax的出現 -> 後臺發送非同步請 ...
  • 摘要:本文深入解析了Nuxt3框架中的多個核心生命周期鉤子和組件註冊功能,包括imports:sources、imports:extend、imports:context、imports:dirs、components:dirs及components:extend,通過實例代碼指導開發者如何在不同場... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...