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

JS實現(xiàn)根據(jù)URL批量下載文件并壓縮成zip文件

 更新時間:2023年08月02日 11:58:42   作者:DCodes  
這篇文章主要為大家學(xué)習(xí)介紹了JS如何實現(xiàn)根據(jù)URL批量下載文件并壓縮成zip文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下

效果圖

根據(jù)url批量下載圖片或者視頻,只需要將圖片的url和名稱放到數(shù)組對象即可,例如:

let fileArr = [
    {fvUrl:'https://image.xuboren.com/image/2023/07/26/1410829074764cdbaa4314a084eb749e.jpg',
    fvName: '圖片名稱'},
    {fvUrl:'https://image.xuboren.com/image/2023/07/26/49536f24f07b4d0eb0e43171019c5f1f.jpg',
    fvName: '圖片名稱2'}
]

將fileArr文件傳入到下面的函數(shù)中

npm install jszip --save 
npm install file-saver --save
npm install axios
// loadZip.js
import JSZip from 'jszip'
import FileSaver from 'file-saver'
import axios from 'axios';
// 批量打包下載
// fileArr下載的list:例如:
const loadZip = async (fileArr, zipName = '下載文件') => {
  fileArr.forEach(el=>{
    el.fvName = `${el.fvName}.${el.fvUrl.split('.').at(-1)}`  // 截取url的后綴名添加到文件名: fvname.jpg
  })
  const zip = new JSZip() // 創(chuàng)建實例對象
  const promises = []
  // 遍歷生成下載文件
  fileArr.forEach((item) => {
    const promise = getFile(item.fvUrl).then((res) => {
      const fvName = item.fvName + ''
      // 創(chuàng)建文件用file(),創(chuàng)建文件夾用 floder()
      zip.file(fvName, res.data, {
        binary: true
      })
    })
    promises.push(promise)
  })
 /** 
Promise.all() 靜態(tài)方法接受一個 Promise 可迭代對象作為輸入,并返回一個 Promise。當(dāng)所有輸入的 Promise 都被兌現(xiàn)時,返回的 Promise 也將被兌現(xiàn)(即使傳入的是一個空的可迭代對象),并返回一個包含所有兌現(xiàn)值的數(shù)組。如果輸入的任何 Promise 被拒絕,則返回的 Promise 將被拒絕,并帶有第一個被拒絕的原因。
只有當(dāng)all([p1, p2, p3]) 中的每一個 Promise 實例的狀態(tài)都變成 fulfilled, Promise.all()的狀態(tài)才會變成 fulfilled,此時  p1, p2, p3 的返回值組成一個數(shù)據(jù),傳給 Promise.all()的回調(diào)函數(shù)
只要 p1, p2, p3 中任何一個被 rejected,  Promise.all() 的狀態(tài)就會變成 rejected,此時第一個被 rejected 的實例的返回值,會傳給 Promise.all()的回調(diào)函數(shù)。
在上面的代碼中,promises 數(shù)組中的每一個元素,都是 Promise 實例,所以需要用到 Promise.all()
 */
  // 生成 zip 文件
  Promise.all(promiseAll).then(() => {
    // 生成zip 文件
    zip.generateAsync({
      type: 'blob',  // 文件格式
      compression: 'DEFLATE', // STORE: 默認(rèn)不壓縮, DEFLATE:需要壓縮
      compressionOptions: {
        level: 9 // 壓縮等級 1~9   1 壓縮速度最快, 9 最優(yōu)壓縮方式
      }
    }).then((res) => {
      FileSaver.saveAs(res, `${zipName}.zip`) // 使用FileSaver.saveAs保存文件,文件名可自定義
    })
  })
}
// 這一步為下載文件步驟,通過傳入的url下載文件
// 將文件 url 格式轉(zhuǎn)換為 Bolb 類型格式 或者 arraybuffer 格式
const getFile = (fvUrl) => {
  return new Promise((resolve, reject) => {
    axios(fvUrl, {
      method: 'get',  // get請求
      responseType: 'blob' // 返回的數(shù)據(jù)會被強制轉(zhuǎn)為blob類型 ,轉(zhuǎn)換成arraybuffer 也行
    }).then((res) => {
      resolve(res) // 將下載的文件返回
    }).catch(err => {
      reject(err)
    })
  })
}
export default loadZip;

函數(shù)封裝好后,在對應(yīng)的頁面引入該函數(shù),然后將fileArr, zipName傳入即可,例如:

// 需要使用的頁面
// ...其他邏輯
loadZip(fileArr, zipName);

參考:js實現(xiàn)根據(jù)文件url批量壓縮下載成zip包

到此這篇關(guān)于JS實現(xiàn)根據(jù)URL批量下載文件并壓縮成zip文件的文章就介紹到這了,更多相關(guān)JS批量下載文件并壓縮內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用AutoJs實現(xiàn)微信搶紅包的代碼

    使用AutoJs實現(xiàn)微信搶紅包的代碼

    這篇文章主要介紹了使用AutoJs實現(xiàn)微信搶紅包的代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 使用layui實現(xiàn)的左側(cè)菜單欄以及動態(tài)操作tab項方法

    使用layui實現(xiàn)的左側(cè)菜單欄以及動態(tài)操作tab項方法

    今天小編就為大家分享一篇使用layui實現(xiàn)的左側(cè)菜單欄以及動態(tài)操作tab項方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 前端異常監(jiān)控之如何捕獲并上報JS錯誤與白屏詳解

    前端異常監(jiān)控之如何捕獲并上報JS錯誤與白屏詳解

    在前端開發(fā)中,錯誤處理是提升用戶體驗的關(guān)鍵環(huán)節(jié),當(dāng)用戶在使用應(yīng)用時遇到錯誤,一個友好的提示能有效降低用戶的挫敗感,這篇文章主要介紹了前端異常監(jiān)控之如何捕獲并上報JS錯誤與白屏的相關(guān)資料,需要的朋友可以參考下
    2026-02-02
  • 通過正則格式化url查詢字符串實現(xiàn)代碼

    通過正則格式化url查詢字符串實現(xiàn)代碼

    看到項目里通過js數(shù)組split方法格式化查詢字符串的,突發(fā)奇想為什么不能用正則呢,性能如何?感興趣的朋友可以研究下哦
    2012-12-12
  • uniapp使用vue-cli新建項目并打包的步驟

    uniapp使用vue-cli新建項目并打包的步驟

    這篇文章主要介紹了uniapp使用vue-cli新建項目并打包,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11
  • JavaScript中操作字符串小結(jié)

    JavaScript中操作字符串小結(jié)

    字符串在javascript中幾乎無處不在,在你處理用戶的輸入數(shù)據(jù)的時候,在讀取或設(shè)置DOM對象的屬性時,在操作cookie時,當(dāng)然還有更多...。JavaScript的核心部分提供了一組屬性和方法用于通用的字符串操作,如分割字符串,改變字符串的大小寫,操作子字符串等。
    2015-05-05
  • 用js獲取點擊圖片的值!

    用js獲取點擊圖片的值!

    用js獲取點擊圖片的值!...
    2007-07-07
  • ES6新特性五:Set與Map的數(shù)據(jù)結(jié)構(gòu)實例分析

    ES6新特性五:Set與Map的數(shù)據(jù)結(jié)構(gòu)實例分析

    這篇文章主要介紹了ES6新特性五之Set與Map的數(shù)據(jù)結(jié)構(gòu),結(jié)合實例形式分析了ES6中Set與Map的功能、定義、屬性、結(jié)構(gòu)與相關(guān)使用技巧,需要的朋友可以參考下
    2017-04-04
  • javascript中attachEvent用法實例分析

    javascript中attachEvent用法實例分析

    這篇文章主要介紹了javascript中attachEvent用法,實例分析了javascript中事件綁定的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • js實現(xiàn)點擊切換checkbox背景圖片的簡單實例

    js實現(xiàn)點擊切換checkbox背景圖片的簡單實例

    下面小編就為大家?guī)硪黄猨s實現(xiàn)點擊切換checkbox背景圖片的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05

最新評論

贺兰县| 小金县| 方城县| 刚察县| 南京市| 和林格尔县| 兴宁市| 夏邑县| 古田县| 萝北县| 黔西| 永仁县| 南木林县| 宕昌县| 丰都县| 抚州市| 张家口市| 阿拉尔市| 察雅县| 连平县| 武川县| 凌云县| 西乌珠穆沁旗| 松阳县| 永靖县| 青阳县| 康定县| 依安县| 蒲江县| 保定市| 诸城市| 当雄县| 金坛市| 中江县| 崇礼县| 定远县| 钟山县| 万山特区| 白沙| 祁门县| 南阳市|