国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue3利用 a 標(biāo)簽,文件流,JSZip 壓縮包,實(shí)現(xiàn)文件下載

這篇具有很好參考價(jià)值的文章主要介紹了vue3利用 a 標(biāo)簽,文件流,JSZip 壓縮包,實(shí)現(xiàn)文件下載。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

序:

在實(shí)現(xiàn)文件的下載,采用 a 標(biāo)簽,會(huì)出現(xiàn)圖片,沒有進(jìn)行下載,而是,在當(dāng)前頁面打開了圖片。

導(dǎo)致原因: ·a標(biāo)簽,有 download 屬性,可以實(shí)現(xiàn)下載 同源文件( ip 和 端口 相同),當(dāng)圖片不同源 時(shí),點(diǎn)擊下載,會(huì)在當(dāng)前窗口直接打開圖片,而不是進(jìn)入下載狀態(tài)。

1. 后端返回文件 url (a標(biāo)簽)

1.1 沒有圖片的情況

<template>
  <div>
    <a-modal v-model:visible="props.visible"  title="DownloadFile">
    <div class="down-load-file" v-for = "(item, index) in fileList" :key="index">
      <h4>{{item.fileType}}: </h4>
      <a :href="item.fileUrl" download>{{item.fileName}}</a>
    </div>
    </a-modal>
  </div>
</template>

1.2 下載遠(yuǎn)程圖片

1.2.1 圖片地址后加"?response-content-type=application/octet-stream"

使用contentType訪問頁面的時(shí)候,瀏覽器就會(huì)開啟下載框?qū)ζ鋬?nèi)容進(jìn)行下載

<template>
  <div>
    <a-modal v-model:visible="props.visible"  title="DownloadFile">
    <div class="down-load-file" v-for = "(item, index) in fileList" :key="index">
      <h4>{{item.fileType}}: </h4>
      <span class="opr-btn-normal" @click="download(item.fileUrl)">{{item.fileName}}</span>
    </div>
    </a-modal>
  </div>
</template>
<script lang="ts" setup>
import { onMounted, createVNode, reactive, defineComponent, ref } from 'vue';

// 列表
const fileList = ref<any[]>([]);

const download = (url) => {
  // 處理圖片下載
  let newstring= url.substring(url.length-4, url.length);
  if(['.png', '.jpg','jpeg', '.bmp', '.gif', 'webp', '.psd', '.svg', 'tiff'].indexOf(newstring) !== -1) {
    url = url + '?response-content-type=application/octet-stream'
  }
  let a = document.createElement("a");
    a.setAttribute("href", url);
    a.setAttribute("download",'');
    a.setAttribute("target", "_blank");
    let clickEvent = document.createEvent("MouseEvents");
    clickEvent.initEvent("click", true, true);
    a.dispatchEvent(clickEvent);
}

</script>

<style lang="less">
.opr-btn-normal {
  color: #007df1;
  cursor: pointer;
  &:hover {
    text-decoration: underline;
  }
}
.down-load-file {
  display: flex;
  >span {
    margin-left: 10px;
  }
}
</style>
1.2.2、通過 canvas 方式 保存圖片
<script>
  /**
   * 下載圖片
   * @param {string} imgsrc 圖片地址
   */
  downloadIamge(imgsrc) {
    // 新建圖片對象
    let image = new Image();
    // 解決跨域 Canvas 污染問題
    image.setAttribute("crossOrigin", "anonymous");
    // 圖片加載
    image.onload = function() {
      // 新建 canvas標(biāo)簽
      let canvas = document.createElement("canvas");
      // 設(shè)置 canvas寬高
      canvas.width = image.width;
      canvas.height = image.height;
      // 添加 canvas畫筆
      let context = canvas.getContext("2d");
      // 繪制圖片
      context.drawImage(image, 0, 0, image.width, image.height);
      // 得到圖片的 base64 編碼
      let url = canvas.toDataURL("image/png");
      // 新建 a標(biāo)簽
      let a = document.createElement("a");
      // 新建點(diǎn)擊事件
      let event = new MouseEvent("click");
      // 將圖片的 base64 編碼,設(shè)置為 a標(biāo)簽的地址
      a.href = url;
      // 觸發(fā)點(diǎn)擊事件
      a.dispatchEvent(event);
    };
    // 將圖片地址 設(shè)置為 傳入的參數(shù) imgsrc
    image.src = imgsrc;
  };
 
  /**
   * 下載方法
   * @param {string} filepath 文件地址
   */
  downloads(filepath) {
    // isImageFile():自定義函數(shù),根據(jù)*后綴*判斷是否是圖片
    if (isImageFile(filepath)){
      this.downloadIamge(filepath)
    } else {
      this.downloadFile(filepath)
    }
  };
</script>

2. 后臺(tái)返回文件流時(shí),用 blob 對象下載文件

參考

// res 是返回的文件流,type 是文件MIME類型, fileName 是給下載的文件一個(gè)名稱
const blobDownloadFile = (res: any, type: string, fileName: string) => {
  const blob = new Blob([res], {
    type: type
  })
  const a = document.createElement('a')
  const URL = window.URL || window.webkitURL
  const herf = URL.createObjectURL(blob)
  a.href = herf
  a.download = fileName
  document.body.appendChild(a)
  a.click()
  document.body.removeChild(a)
  window.URL.revokeObjectURL(herf)
}
blobDownloadFile(url, 'text/plain', '測試')

3. JSZip 庫以壓縮包下載文件

JSZip庫
組件中使用文章來源地址http://www.zghlxwxcb.cn/news/detail-402340.html

import { onMounted } from 'vue'
import JSZip from 'jszip'
import JSZipUtils from 'jszip-utils'
import { saveAs } from 'file-saver'

let dowloadZip: JSZip
const urlToPromise = (url: string) =>
  new Promise((resolve, reject) => {
    JSZipUtils.getBinaryContent(url, (err: any, data: unknown) => {
      if (err) {
        reject(err)
      } else {
        resolve(data)
      }
    })
  })

// 添加文件
dowloadZip.file(item.fileName, urlToPromise(item.fileUrl), { binary: true })

// .generateAsync() 生成一個(gè) zip 文件
dowloadZip
  .generateAsync({ type: 'blob' })
  .then(
    (blob) => {
      // saveAs(blob, "測試.zip"); 直接在瀏覽器打成 測試.zip 包并下載
      saveAs(blob, '測試.zip')
    },
    (e) => {
      console.log(e)
    }
  )

// 在 DOM 掛載之后創(chuàng)建 JSZip 實(shí)例
onMounted(() => {
  dowloadZip = new JSZip()
})

到了這里,關(guān)于vue3利用 a 標(biāo)簽,文件流,JSZip 壓縮包,實(shí)現(xiàn)文件下載的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Vue3 - 詳細(xì)實(shí)現(xiàn)下載從服務(wù)端返回的文件流 Blob 對象教程,前端下載后端接口返回的文件流并自動(dòng)保存到本地,支持任何格式的文件下載(從后端拿到二進(jìn)制文件流 Blob 對象,前端實(shí)現(xiàn)點(diǎn)擊下載功能)

    Vue3 - 詳細(xì)實(shí)現(xiàn)下載從服務(wù)端返回的文件流 Blob 對象教程,前端下載后端接口返回的文件流并自動(dòng)保存到本地,支持任何格式的文件下載(從后端拿到二進(jìn)制文件流 Blob 對象,前端實(shí)現(xiàn)點(diǎn)擊下載功能)

    調(diào)用服務(wù)端(后端)接口拿到文件流,通過前端下載并保存到本地。 本文 實(shí)現(xiàn)了在 vue3 項(xiàng)目中,通過后端接口返回的二進(jìn)制文件流 Blob 對象,在前端進(jìn)行點(diǎn)擊下載并保存到用戶本地,任何格式的文件都可以輕松下載, 保證您直接復(fù)制代碼,改個(gè)請求地址就可以使用了, 如下

    2024年02月04日
    瀏覽(174)
  • Java實(shí)現(xiàn)打包壓縮文件或文件夾生成zip以實(shí)現(xiàn)多文件批量下載

    Java實(shí)現(xiàn)打包壓縮文件或文件夾生成zip以實(shí)現(xiàn)多文件批量下載

    有時(shí)候在系統(tǒng)中需要一次性下載多個(gè)文件,但逐個(gè)下載文件比較麻煩。這時(shí)候,最好的解決辦法是將所有文件打包成一個(gè)壓縮文件,然后下載這個(gè)壓縮文件,這樣就可以一次性獲取所有所需的文件了。 下面是一個(gè)名為CompressUtil的工具類的代碼,它提供了一些方法來處理文件壓

    2024年02月06日
    瀏覽(31)
  • vue3文件下載功能

    定義方法: utils.js 使用 test.vue

    2024年02月12日
    瀏覽(25)
  • 前端實(shí)現(xiàn)下載文件(包含壓縮包下載)方式匯總

    默認(rèn)最簡單的下載方式是: window.open(后臺(tái)接口API路徑) ,但該方法弊端:因是新開窗口方式,前端展示上,每次會(huì)閃下。 此外,如果使用window.open(文件URL)方式: pdf、office文檔、psd:直接下載。 圖片、txt:新開窗口預(yù)覽,不會(huì)下載;且txt預(yù)覽,有時(shí)出現(xiàn)中文亂碼問題。 一、

    2024年02月10日
    瀏覽(19)
  • Vue 項(xiàng)目使用 jszip 和 file-saver 批量打包壓縮圖片或附件

    需求與挑戰(zhàn)總是并存的,比如今天,又是掉頭發(fā)的一天?。?! 背景:圖片上傳功能用戶會(huì)批量上傳好多個(gè),并且圖片可能還會(huì)很大,于是就采用了前端先壓縮,然后將壓縮包直接傳給后端。 1、安裝插件: 2、在頁面中引入插件: 注釋:在引入組件的位置定義一個(gè)全局的 zi

    2024年02月11日
    瀏覽(15)
  • 使用serverless實(shí)現(xiàn)從oss下載文件并壓縮

    使用serverless實(shí)現(xiàn)從oss下載文件并壓縮

    ????????公司之前開發(fā)一個(gè)網(wǎng)盤系統(tǒng), 可以上傳文件, 打包壓縮下載文件, 但是在處理大文件的時(shí)候, 服務(wù)器遇到了性能問題, 主要是這個(gè)項(xiàng)目是單機(jī)部署.......(離譜),? 然后帶寬只有100M, 現(xiàn)在用戶比之前多很多, 然后所有人的壓縮下載請求都給到這一臺(tái)服務(wù)器了, 比如多個(gè)人下

    2024年02月15日
    瀏覽(14)
  • vue3 pdf、word等文件下載

    vue3 pdf、word等文件下載

    ?效果: ? ? table組件

    2024年02月11日
    瀏覽(25)
  • Spring Boot實(shí)現(xiàn)對超大文件進(jìn)行異步壓縮下載

    Spring Boot實(shí)現(xiàn)對超大文件進(jìn)行異步壓縮下載

    ?在Web應(yīng)用中,文件下載功能是一個(gè)常見的需求,特別是當(dāng)你需要提供用戶下載各種類型的文件時(shí)。本文將演示如何使用Spring Boot框架來實(shí)現(xiàn)一個(gè)簡單而強(qiáng)大的文件下載功能。我們將創(chuàng)建一個(gè)RESTful API,通過該API,用戶可以下載問價(jià)為ZIP壓縮文件。 首先,確保你已經(jīng)創(chuàng)建了一個(gè)

    2024年02月07日
    瀏覽(24)
  • 跨域問題問題小結(jié)(vue3)---處理http文件鏈接下載失敗

    跨域問題問題小結(jié)(vue3)---處理http文件鏈接下載失敗

    請求后端 提供的鏈接居然是一個(gè)http的文件鏈接 首先對這個(gè)地址做了正則判斷替換成https 這樣做的原因是 瀏覽器會(huì)認(rèn)為在https下打開的http鏈接是不安全操作,所以會(huì)進(jìn)行攔截,或者訪問不成功 替換后運(yùn)行報(bào)錯(cuò) 錯(cuò)誤信息告訴我們 混合請求 (兩個(gè)地址域名不一致)是被瀏覽器

    2024年02月08日
    瀏覽(27)
  • vue中,給一個(gè)URL地址,利用FileSaver.js插件下載文件到本地

    vue中,給一個(gè)URL地址,利用FileSaver.js插件下載文件到本地

    ①首先下載 FileSaver.js 插件??? ②在需要的.vue頁面引入 ?在HTML中引入 ③ 如果想保存一個(gè)TXT文檔本地 結(jié)果: ? 內(nèi)容: ? ?④ 如果想保存一個(gè)圖片 結(jié)果: ?圖片內(nèi)容: ?如果圖片不允許跨域則會(huì)出現(xiàn)這種情況: ? ⑤下面這個(gè)方法則可以完美的解決跨域問題,不光可以下載圖

    2024年02月06日
    瀏覽(121)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包