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

vue進(jìn)行下載與處理二進(jìn)制流文件的方法詳解

 更新時(shí)間:2023年12月15日 11:10:40   作者:UserGuan  
這篇文章主要為大家詳細(xì)介紹了vue如何實(shí)現(xiàn)將后端返回的二進(jìn)制流進(jìn)行處理并實(shí)現(xiàn)下載,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

什么是二進(jìn)制流文件

二進(jìn)制文件是一種計(jì)算機(jī)文件格式,它的數(shù)據(jù)以二進(jìn)制形式存儲,與文本文件不同。二進(jìn)制文件可以包含任意類型的數(shù)據(jù),例如圖像、音頻、視頻、可執(zhí)行文件、壓縮文件等,而文本文件則僅僅包含 ASCII 碼或其他編碼的字符數(shù)據(jù)。

二進(jìn)制文件的底層原理是將數(shù)據(jù)以二進(jìn)制形式存儲在文件中。在計(jì)算機(jī)中,所有的數(shù)據(jù)都是以二進(jìn)制形式表示的,包括數(shù)字、字符、圖像、音頻、視頻等。二進(jìn)制文件通過按照特定的格式將這些二進(jìn)制數(shù)據(jù)存儲在文件中,以便在需要時(shí)能夠正確地讀取和使用。

二進(jìn)制流常見的 Blob、ArrayBuffer、File、FileReader 和 FormData

二進(jìn)制流長啥樣?如下圖:

獲取二進(jìn)制流文件的方法

/** 獲取二進(jìn)制流文件
 * @param url 請求地址
 * @param params 請求參數(shù)
 * @param method 請求方式,默認(rèn):'POST'
 * @param configType 設(shè)置響應(yīng)類型
 * 'arraybuffer':設(shè)置響應(yīng)類型為二進(jìn)制對象(返回的是一個(gè)包含二進(jìn)制數(shù)據(jù)的 JavaScript ArrayBuffer 類型化數(shù)組)
 * 'blob':設(shè)置響應(yīng)類型為二進(jìn)制對象(返回的是一個(gè)包含二進(jìn)制數(shù)據(jù)的 Blob 對象)
 * @returns {Promise<void>} 請求結(jié)果
 */
async getBinaryFile(url, params, method = 'POST', configType = 'arraybuffer') {
  const headConfig = {
    responseType: configType // 設(shè)置響應(yīng)類型
  }
  let res = {} // 請求結(jié)果
  switch (method.toLowerCase()) {
    case 'get':
      res = await axios.get(url, { params, ...headConfig }) // get 請求方式
      break
    case 'post':
      res = await axios.post(url, params, { ...headConfig }) // post 請求方式
      break
  }
  this.downloadBinaryFile(res.data, '項(xiàng)目介紹.txt') // 下載二進(jìn)制文件
},

下載二進(jìn)制流文件的方法

/** 下載二進(jìn)制流文件
 * @param binFile 二進(jìn)制文件流
 * @param fileName 文件名,例如:測試文本.txt
 * @param blobType Blob 對象的 type 屬性給出文件的 MIME 類型,默認(rèn):'application/octet-stream'(用于通用二進(jìn)制數(shù)據(jù))
 */
downloadBinaryFile(binFile, fileName, blobType = 'application/octet-stream') {
  // 處理二進(jìn)制數(shù)據(jù)并創(chuàng)建 Blob 對象
  const blobObj = new Blob([binFile], { type: blobType })
  // 創(chuàng)建一個(gè)鏈接并設(shè)置下載屬性
  const downloadLink = document.createElement('a')
  let url = window.URL || window.webkitURL || window.moxURL // 兼容不同瀏覽器的 URL 對象
  url = url.createObjectURL(blobObj)
  downloadLink.href = url
  downloadLink.download = fileName // 設(shè)置下載的文件名
  // 將鏈接添加到 DOM 中,模擬點(diǎn)擊
  document.body.appendChild(downloadLink)
  downloadLink.click()
  // 移除創(chuàng)建的鏈接和釋放 URL 對象
  document.body.removeChild(downloadLink)
  window.URL.revokeObjectURL(url)
}

完整代碼

在 Vue.js 中,可以通過使用 axios 或其他類似的 HTTP 庫從后端獲取二進(jìn)制數(shù)據(jù),并通過前端進(jìn)行處理以實(shí)現(xiàn)文件下載。以下是一個(gè)簡單的示例,使用 axios 和 Blob 對象來處理二進(jìn)制數(shù)據(jù)。

首先,確保你的 Vue 項(xiàng)目中已經(jīng)安裝了 axios 網(wǎng)絡(luò)請求庫

npm install axios

然后,在你的 Vue 組件中,可以這樣處理后端返回的二進(jìn)制流

<!-- 下載二進(jìn)制流文件 -->
<template>
  <div>
    <button @click="getBinaryFile('YOUR_BACKEND_API_ENDPOINT', { id: '' })">下載文件</button>
  </div>
</template>
 
<script>
import axios from 'axios'
 
export default {
  methods: {
    /** 獲取二進(jìn)制流文件
     * @param url 請求地址
     * @param params 請求參數(shù)
     * @param method 請求方式,默認(rèn):'POST'
     * @param configType 設(shè)置響應(yīng)類型
     * 'arraybuffer':設(shè)置響應(yīng)類型為二進(jìn)制對象(返回的是一個(gè)包含二進(jìn)制數(shù)據(jù)的 JavaScript ArrayBuffer 類型化數(shù)組)
     * 'blob':設(shè)置響應(yīng)類型為二進(jìn)制對象(返回的是一個(gè)包含二進(jìn)制數(shù)據(jù)的 Blob 對象)
     * @returns {Promise<void>} 請求結(jié)果
     */
    async getBinaryFile(url, params, method = 'POST', configType = 'arraybuffer') {
      const headConfig = {
        responseType: configType // 設(shè)置響應(yīng)類型
      }
      let res = {} // 請求結(jié)果
      switch (method.toLowerCase()) {
        case 'get':
          res = await axios.get(url, { params, ...headConfig }) // get 請求方式
          break
        case 'post':
          res = await axios.post(url, params, { ...headConfig }) // post 請求方式
          break
      }
      this.downloadBinaryFile(res.data, '項(xiàng)目介紹.txt') // 下載二進(jìn)制文件
    },
    /** 下載二進(jìn)制流文件
     * @param binFile 二進(jìn)制文件流
     * @param fileName 文件名,例如:測試文本.txt
     * @param blobType Blob 對象的 type 屬性給出文件的 MIME 類型,默認(rèn):'application/octet-stream'(用于通用二進(jìn)制數(shù)據(jù))
     */
    downloadBinaryFile(binFile, fileName, blobType = 'application/octet-stream') {
      // 處理二進(jìn)制數(shù)據(jù)并創(chuàng)建 Blob 對象
      const blobObj = new Blob([binFile], { type: blobType })
      // 創(chuàng)建一個(gè)鏈接并設(shè)置下載屬性
      const downloadLink = document.createElement('a')
      let url = window.URL || window.webkitURL || window.moxURL // 兼容不同瀏覽器的 URL 對象
      url = url.createObjectURL(blobObj)
      downloadLink.href = url
      downloadLink.download = fileName // 設(shè)置下載的文件名
      // 將鏈接添加到 DOM 中,模擬點(diǎn)擊
      document.body.appendChild(downloadLink)
      downloadLink.click()
      // 移除創(chuàng)建的鏈接和釋放 URL 對象
      document.body.removeChild(downloadLink)
      window.URL.revokeObjectURL(url)
    }
  }
}
</script>

確保替換 `YOUR_BACKEND_API_ENDPOINT` 為你的后端API的實(shí)際地址,并設(shè)置適當(dāng)?shù)奈募?/p>

這個(gè)例子中,我們使用了 axios 來獲取后端返回的二進(jìn)制數(shù)據(jù),然后使用 Blob 對象創(chuàng)建一個(gè)包含該二進(jìn)制數(shù)據(jù)的 Blob,最后創(chuàng)建一個(gè)下載鏈接并模擬點(diǎn)擊以觸發(fā)文件下載。

注意:瀏覽器的同源策略可能會限制跨域請求。如果你的前端和后端不在同一個(gè)域下,你可能需要在后端配置 CORS(跨域資源共享)來允許前端訪問。

關(guān)于 Blob 的 content-type 的部分媒體類型

".*"="application/octet-stream"
".001"="application/x-001"
".301"="application/x-301"
".323"="text/h323"
".906"="application/x-906"
".907"="drawing/907"
".a11"="application/x-a11"
".acp"="audio/x-mei-aac"
".ai"="application/postscript"
".aif"="audio/aiff"
".aifc"="audio/aiff"
".aiff"="audio/aiff"
".anv"="application/x-anv"
".asa"="text/asa"
".asf"="video/x-ms-asf"
".asp"="text/asp"
".asx"="video/x-ms-asf"
".au"="audio/basic"
".avi"="video/avi"
".awf"="application/vnd.adobe.workflow"
".biz"="text/xml"
".bmp"="application/x-bmp"
".bot"="application/x-bot"
".c4t"="application/x-c4t"
".c90"="application/x-c90"
".cal"="application/x-cals"
".cat"="application/vnd.ms-pki.seccat"
".cdf"="application/x-netcdf"
".cdr"="application/x-cdr"
".cel"="application/x-cel"
".cer"="application/x-x509-ca-cert"
".cg4"="application/x-g4"
".cgm"="application/x-cgm"
".cit"="application/x-cit"
 
".doc"="application/msword"
".docx"="application/vnd.openxmlformats-officedocument.wordprocessingml.document"
".rtf"="application/rtf"
".xls"="application/vnd.ms-excel application/x-excel"
".xlsx"="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
".ppt"="application/vnd.ms-powerpoint"
".pptx"="application/vnd.openxmlformats-officedocument.presentationml.presentation"
".pps"="application/vnd.ms-powerpoint"
".ppsx"="application/vnd.openxmlformats-officedocument.presentationml.slideshow"
".pdf"="application/pdf"
".swf"="application/x-shockwave-flash"
".dll"="application/x-msdownload"
".exe"="application/octet-stream"
".msi"="application/octet-stream"
".chm"="application/octet-stream"
".cab"="application/octet-stream"
".ocx"="application/octet-stream"
".rar"="application/octet-stream"
".tar"="application/x-tar"
".tgz"="application/x-compressed"
".zip"="application/x-zip-compressed"
".z"="application/x-compress"
".wav"="audio/wav"
".wma"="audio/x-ms-wma"
".wmv"="video/x-ms-wmv"
".mp3, .mp2, .mpe, .mpeg, .mpg"="audio/mpeg"
".rm"="application/vnd.rn-realmedia"
".mid, .midi, .rmi"="audio/mid"
".bmp"="image/bmp"
".gif"="image/gif"
".png"="image/png"
".tif, .tiff"="image/tiff"
".jpe, .jpeg, .jpg"="image/jpeg"
".txt"="text/plain"
".xml"="text/xml"
".html"="text/html"
".css"="text/css"
".js"="text/javascript"
".mht, .mhtml"="message/rfc822"

關(guān)于 responseType 的值

"" - 設(shè)為空字符串與設(shè)置為 "text" 相同,默認(rèn)類型

"text" - 返回的是包含在 DOMString 對象中的文本

"document" - 返回的是一個(gè) HTML Document 或 XML XMLDocument

"arraybuffer" - 返回的是一個(gè)包含二進(jìn)制數(shù)據(jù)的 JavaScript ArrayBuffer

"blob" - 返回的是一個(gè)包含二進(jìn)制數(shù)據(jù)的 Blob 對象

"json" - 返回的是一個(gè) JavaScript 對象。這個(gè)對象是通過將接收到的數(shù)據(jù)類型視為 JSON 解析得到的

"ms-stream" - 返回的是下載流的一部分;此響應(yīng)類型僅允許下載請求,并且僅受 Internet Explorer 支持

到此這篇關(guān)于vue進(jìn)行下載與處理二進(jìn)制流文件的方法詳解的文章就介紹到這了,更多相關(guān)vue二進(jìn)制流文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue中指令v-model的原理及使用方法

    Vue中指令v-model的原理及使用方法

    v-model是Vue中的一個(gè)重要語法糖,主要用于實(shí)現(xiàn)數(shù)據(jù)的雙向綁定,它通過結(jié)合value屬性和input事件,簡化了代碼并提高了開發(fā)效率,文中通過代碼介紹的非常詳解,需要的朋友可以參考下
    2024-09-09
  • uniapp+vue3實(shí)現(xiàn)自定義封裝支付密碼組件

    uniapp+vue3實(shí)現(xiàn)自定義封裝支付密碼組件

    本文介紹使用Vue3語法在uniapp中自定義封裝支付密碼組件,通過父組件與子組件的交互實(shí)現(xiàn)密碼輸入功能,并附效果圖展示,感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • Vue中input被賦值后,無法再修改編輯的問題及解決

    Vue中input被賦值后,無法再修改編輯的問題及解決

    這篇文章主要介紹了Vue中input被賦值后,無法再修改編輯的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 基于Vue實(shí)例生命周期(全面解析)

    基于Vue實(shí)例生命周期(全面解析)

    下面小編就為大家?guī)硪黄赩ue實(shí)例生命周期(全面解析)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • vue使用一些外部插件及樣式的配置代碼

    vue使用一些外部插件及樣式的配置代碼

    這篇文章主要介紹了vue使用一些外部插件及樣式的配置代碼,本文分步驟實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • vue動態(tài)綁定background的方法

    vue動態(tài)綁定background的方法

    background是background-color,background-image,background-repeat,background-attachment,background-position,background-size等屬性的縮寫,本文我用動態(tài)綁定background-image來舉例,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • vue項(xiàng)目中如何使用TypeScript相關(guān)配置

    vue項(xiàng)目中如何使用TypeScript相關(guān)配置

    這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目中如何使用TypeScript相關(guān)配置的相關(guān)資料,typescript在開發(fā)過程中廣泛被應(yīng)用,在這里總結(jié)下項(xiàng)目中ts的應(yīng)用,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • vue3卡片垂直無限滾動方式

    vue3卡片垂直無限滾動方式

    使用CSS動畫實(shí)現(xiàn)DOM向上滾動,JS動態(tài)計(jì)算數(shù)據(jù)條數(shù)并實(shí)時(shí)調(diào)整滾動速度,確保在onMounted中調(diào)用以正確渲染DOM
    2025-07-07
  • 手寫可拖動穿梭框組件CustormTransfer vue實(shí)現(xiàn)示例

    手寫可拖動穿梭框組件CustormTransfer vue實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了手寫可拖動穿梭框組件CustormTransfer vue實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Vue 組件化基本使用詳情

    Vue 組件化基本使用詳情

    這篇文章主要給大家分享的是Vue 組件化基本使用,所謂組件化,就是把頁面拆分成多個(gè)組件,每個(gè)組件依賴的 CSS、JS、模板、圖片等資源放在一起開發(fā)和維護(hù)。 因?yàn)榻M件是資源獨(dú)立的,所以組件在系統(tǒng)內(nèi)部可復(fù)用,組件和組件之間可以嵌套,下面來看文章學(xué)習(xí)內(nèi)容吧
    2021-10-10

最新評論

德江县| 星子县| 崇礼县| 牟定县| 响水县| 合山市| 肥城市| 阳江市| 资阳市| 札达县| 宁河县| 托克逊县| 梅河口市| 祁门县| 澄迈县| 仁寿县| 柳州市| 厦门市| 牙克石市| 永吉县| 平顶山市| 龙南县| 阿鲁科尔沁旗| 清水县| 竹北市| 阿拉善盟| 陇西县| 台北县| 新丰县| 尚义县| 江安县| 忻州市| 万山特区| 常宁市| 石家庄市| 夏河县| 工布江达县| 浑源县| 永宁县| 西乌珠穆沁旗| 明星|