圖片預載入需要token認證的地址處理

来源:https://www.cnblogs.com/dreamtt/archive/2023/07/21/17571730.html
-Advertisement-
Play Games

1.添加函數修改img的屬性; /** * * @param {*} idName 傳入的id,獲取改img的dom,添加相應的數學 */ export const proxyImg = (idName) => { const img = document.getElementById(idName ...


1.添加函數修改img的屬性;

/**
 * 
 * @param {*} idName 傳入的id,獲取改img的dom,添加相應的數學
 */
export const proxyImg = (idName) => {
  const img = document.getElementById(idName || 'img');
  const url = img.getAttribute('authsrc');
  const request = new XMLHttpRequest();
  request.responseType = 'blob';
  request.open('get', url, true);
  request.setRequestHeader('x-access-token', localStorage.getItem('x-access-token')); // 換成自己的token
  request.onreadystatechange = e => {
    if (request.readyState == XMLHttpRequest.DONE && request.status == 200) {
      img.src = URL.createObjectURL(request.response);
      img.onload = () => {
        URL.revokeObjectURL(img.src);
      }
    }
  };
  request.send(null);
}

2.處理圖片,這裡已圖片list進行處理為例;

const { proxyImg } = require('@/utils/utils');
import { isEmpty } from 'lodash';

/**
   * 
   * @param {*} imgList 傳入的img 是數組 [{fileId: 3318310, fileName: '一張圖片', fileSize: "982.00KB" , fileUrl: "/staticResource/images/一張圖片.jpg", ...},{}]
   * @param {*} field 傳入的id,作用是獲取img的dom
   */
  const dealImgData = (imgList: any[], field: String) => {
    if (!isEmpty(imgList)) { // 判斷imgList是否為空
      imgList.forEach((el, index) => {
        // 為什麼又判斷,就是解決不顯示的問題, field都要傳......
        if(field) {
          proxyImg(`img${field}${index}`)
        }
      });
    }
  }

 3.調用函數;

  dealImgData('傳入的img的數組', '傳入id,隨便傳,在當前頁面是唯一值就OK了’);
  備註:可以在componentDidUpdate中調用,也可以在useEffect中調用

備註:

一般載入圖片會用到img標簽,添加src屬性,如下所示:

<img src="imgUrl" />

但是因為需要在get請求頭中加入token信息,不能直接將後臺返回的圖片url直接添加到src 後端返回二進位流,我們需要將二進位流以圖片的形式顯示在頁面中

看到二進位,可以將responseType 設置為 blob


URL.createObjectURL()

URL.createObjectURL()  靜態方法會創建一個 DOMString,其中包含一個表示參數中給出的對象的URL。這個 URL 的生命周期和創建它的視窗中的 document 綁定。這個新的URL 對象表示指定的 File 對象或 Blob 對象。

URL.revokeObjectURL()

URL.revokeObjectURL() 靜態方法用來釋放一個之前已經存在的、通過調用 URL.createObjectURL() 創建的 URL 對象。當你結束使用某個 URL 對象之後,應該通過調用這個方法來讓瀏覽器知道不用在記憶體中繼續保留對這個文件的引用了。


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

-Advertisement-
Play Games
更多相關文章
  • # clion申請教育認證 ## 1、註冊jetbrains賬號 [jetbrains註冊賬號網站鏈接](https://account.jetbrains.com/login) ![picture 1](https://img2023.cnblogs.com/blog/2915785/202307 ...
  • 一、多表關係 一對多或者多對一 案例:部門與員工的關係 關係:一個部門對應多個員工,一個員工對應一個部門(不考慮跨部門的特殊情況) 實現:在多的一方建立外鍵,指向一的一方的主鍵,這裡員工表是多的的一方,部門表是一的一方 多對多 案例:學生與課程的關係 關係:一個學生可以選修多門課程,一門課程也可以供 ...
  • ORALCE substr函數及substrb與字元集關係 語法 函數用途: SUBSTR函數用來截取從源字元(參數 char)中截取一部分目標字元,截取方式為限定從源字元截取起始位置(參數 positon),並限定截取目標字元長度(參數 substring_length)。substr系列函數計算 ...
  • ## 簡述 本文主要介紹使用 [CloudCanal](https://www.clougence.com?kw=cnblogs_20230721) 做數據遷移同步時如何對特定數據做脫敏處理。 ## 技術點 ### 自定義代碼 CloudCanal 允許用戶上傳業務代碼到數據任務中,完成數據遷移、同 ...
  • 一、哪些因素會成為系統的瓶頸 CPU:如果存在大量的計算,他們會長時間不間斷的占用CPU資源,導致其他資源無法爭奪到CPU而響應緩慢,從而帶來系統性能問題,例如頻繁的FullGC,以及多線程造成的上下文頻繁的切換,都會導致CPU繁忙,一般情況下CPU使用率<75%比較合適。 記憶體:Java記憶體一般是 ...
  • 我們智能客服知識庫機器人已經開發完成,後端資料庫是使用的qdrant向量資料庫,但是該資料庫並沒有導出備份功能,所以我按簡單的純前端實現知識庫導出excel數據 使用第三方庫(如SheetJS) SheetJS是一個流行的JavaScript庫,可幫助處理Excel文件。您可以使用SheetJS來將 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 背景 愉快的雙休周末剛過完,早上來忽然被運營通知線上業務掛了,用戶無法下單。卧槽,趕緊進入debug模式,一查原來是服務端返回的數據有問題,趕緊問了服務端,大佬回覆說是業務部門配置套餐錯誤。好在主責不在我們,不過趕緊寫了復盤文檔,主動找自 ...
  • 博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...