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

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)制形式存儲(chǔ),與文本文件不同。二進(jìn)制文件可以包含任意類型的數(shù)據(jù),例如圖像、音頻、視頻、可執(zhí)行文件、壓縮文件等,而文本文件則僅僅包含 ASCII 碼或其他編碼的字符數(shù)據(jù)。

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

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

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

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

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

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

/** 下載二進(jìn)制流文件
 * @param binFile 二進(jìn)制文件流
 * @param fileName 文件名,例如:測(cè)試文本.txt
 * @param blobType Blob 對(duì)象的 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 對(duì)象
  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 對(duì)象
  url = url.createObjectURL(blobObj)
  downloadLink.href = url
  downloadLink.download = fileName // 設(shè)置下載的文件名
  // 將鏈接添加到 DOM 中,模擬點(diǎn)擊
  document.body.appendChild(downloadLink)
  downloadLink.click()
  // 移除創(chuàng)建的鏈接和釋放 URL 對(duì)象
  document.body.removeChild(downloadLink)
  window.URL.revokeObjectURL(url)
}

完整代碼

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

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

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 請(qǐng)求地址
     * @param params 請(qǐng)求參數(shù)
     * @param method 請(qǐng)求方式,默認(rèn):'POST'
     * @param configType 設(shè)置響應(yīng)類型
     * 'arraybuffer':設(shè)置響應(yīng)類型為二進(jìn)制對(duì)象(返回的是一個(gè)包含二進(jìn)制數(shù)據(jù)的 JavaScript ArrayBuffer 類型化數(shù)組)
     * 'blob':設(shè)置響應(yīng)類型為二進(jìn)制對(duì)象(返回的是一個(gè)包含二進(jìn)制數(shù)據(jù)的 Blob 對(duì)象)
     * @returns {Promise<void>} 請(qǐng)求結(jié)果
     */
    async getBinaryFile(url, params, method = 'POST', configType = 'arraybuffer') {
      const headConfig = {
        responseType: configType // 設(shè)置響應(yīng)類型
      }
      let res = {} // 請(qǐng)求結(jié)果
      switch (method.toLowerCase()) {
        case 'get':
          res = await axios.get(url, { params, ...headConfig }) // get 請(qǐng)求方式
          break
        case 'post':
          res = await axios.post(url, params, { ...headConfig }) // post 請(qǐng)求方式
          break
      }
      this.downloadBinaryFile(res.data, '項(xiàng)目介紹.txt') // 下載二進(jìn)制文件
    },
    /** 下載二進(jìn)制流文件
     * @param binFile 二進(jìn)制文件流
     * @param fileName 文件名,例如:測(cè)試文本.txt
     * @param blobType Blob 對(duì)象的 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 對(duì)象
      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 對(duì)象
      url = url.createObjectURL(blobObj)
      downloadLink.href = url
      downloadLink.download = fileName // 設(shè)置下載的文件名
      // 將鏈接添加到 DOM 中,模擬點(diǎn)擊
      document.body.appendChild(downloadLink)
      downloadLink.click()
      // 移除創(chuàng)建的鏈接和釋放 URL 對(duì)象
      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 對(duì)象創(chuàng)建一個(gè)包含該二進(jìn)制數(shù)據(jù)的 Blob,最后創(chuàng)建一個(gè)下載鏈接并模擬點(diǎn)擊以觸發(fā)文件下載。

注意:瀏覽器的同源策略可能會(huì)限制跨域請(qǐng)求。如果你的前端和后端不在同一個(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 對(duì)象中的文本

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

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

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

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

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

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

相關(guān)文章

  • Vue2使用TailwindCSS方法及遇到問題小結(jié)

    Vue2使用TailwindCSS方法及遇到問題小結(jié)

    Tailwind CSS是一個(gè)全新的、可定制的CSS框架,它提供了一系列的CSS類,用于構(gòu)建現(xiàn)代化的Web界面,這篇文章主要介紹了Vue2使用TailwindCSS方法及遇到問題小結(jié),需要的朋友可以參考下
    2024-03-03
  • 通過vue方式實(shí)現(xiàn)二維碼掃碼功能

    通過vue方式實(shí)現(xiàn)二維碼掃碼功能

    這篇文章給大家介紹了通過vue的方式,實(shí)現(xiàn)掃碼功能,實(shí)現(xiàn)步驟分為兩步,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2021-11-11
  • vuex存儲(chǔ)數(shù)組(新建,增,刪,更新)并存入localstorage定時(shí)刪除功能實(shí)現(xiàn)

    vuex存儲(chǔ)數(shù)組(新建,增,刪,更新)并存入localstorage定時(shí)刪除功能實(shí)現(xiàn)

    這篇文章主要介紹了vuex存儲(chǔ)數(shù)組(新建,增,刪,更新),并存入localstorage定時(shí)刪除,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • vue3中h函數(shù)的常用使用方式匯總

    vue3中h函數(shù)的常用使用方式匯總

    其實(shí)h()函數(shù)和createVNode()函數(shù)都是創(chuàng)建dom節(jié)點(diǎn),他們的作用是一樣的,下面這篇文章主要給大家介紹了關(guān)于vue3中h函數(shù)的常用使用方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • vue-cli實(shí)現(xiàn)多頁面多路由的示例代碼

    vue-cli實(shí)現(xiàn)多頁面多路由的示例代碼

    本篇文章主要介紹了vue-cli實(shí)現(xiàn)多頁面多路由的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • Vue+Element ui 根據(jù)后臺(tái)返回?cái)?shù)據(jù)設(shè)置動(dòng)態(tài)表頭操作

    Vue+Element ui 根據(jù)后臺(tái)返回?cái)?shù)據(jù)設(shè)置動(dòng)態(tài)表頭操作

    這篇文章主要介紹了Vue+Element ui 根據(jù)后臺(tái)返回?cái)?shù)據(jù)設(shè)置動(dòng)態(tài)表頭操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 詳解Vue中表單組件的雙向數(shù)據(jù)綁定

    詳解Vue中表單組件的雙向數(shù)據(jù)綁定

    Vue?提供了雙向數(shù)據(jù)綁定機(jī)制,使得開發(fā)者可以輕松地將表單組件的值與?Vue?實(shí)例中的數(shù)據(jù)進(jìn)行關(guān)聯(lián),本文將詳細(xì)介紹如何在?Vue?中使用這些表單組件,并實(shí)現(xiàn)雙向數(shù)據(jù)綁定,需要的可以參考下
    2024-03-03
  • vue使用element實(shí)現(xiàn)上傳圖片和修改圖片功能

    vue使用element實(shí)現(xiàn)上傳圖片和修改圖片功能

    前幾天做到一個(gè)關(guān)于圖片上傳功能,下面這篇文章主要給大家介紹了關(guān)于vue使用element實(shí)現(xiàn)上傳圖片和修改圖片功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Vue獲取input值的四種常用方法

    Vue獲取input值的四種常用方法

    Vue是一種流行的Web開發(fā)框架,它提供了一個(gè)雙向綁定的語法糖。在Vue中,我們可以很容易地獲取頁面上的數(shù)據(jù),并且可以實(shí)時(shí)的響應(yīng)其變化,這篇文章主要給大家介紹了關(guān)于Vue獲取input值的四種常用方法,需要的朋友可以參考下
    2023-09-09
  • vue如何使用moment處理時(shí)間戳轉(zhuǎn)換成日期或時(shí)間格式

    vue如何使用moment處理時(shí)間戳轉(zhuǎn)換成日期或時(shí)間格式

    這篇文章主要給大家介紹了關(guān)于vue如何使用moment處理時(shí)間戳轉(zhuǎn)換成日期或時(shí)間格式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-03-03

最新評(píng)論