日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

如何根據url 批量下載二維碼實現詳解

瀏覽:239日期:2022-06-10 10:03:47
目錄
  • React 前端實現
    • 一、依賴
    • 二、思路整理
      • 1.將選用展示的數據放在數組中
      • 2. 實用 qrcode + canvas 將 url 裝換成 canvas 的二維碼圖片
      • 3.二維碼 cavans 元素們轉成 base64 數據保存在 zip 中
      • 4. 正對 React 進行封裝
      • 5. 下載完畢
  • 小結

    React 前端實現

    有時候,前端根據 urls 批量下載二維碼的需求。

    例如,在管理系統中,公司里面每一個人有一個人主頁(地址), 個人主頁對應自己的內容。為了方便這些內容對外展示,需要一個對應的二維碼,方便客戶快速的訪問其中內容。

    將不同人的主頁地址 url 寫入 二維碼中,然后統一打包到一個 url 中。

    注意在瀏覽中實現,可能會隨著類容的增多變得慢!

    一、依賴

    • qrcode 生成二維碼
    • jszip 壓縮
    • file-save 保存數據到壓縮文件

    二、思路整理

    1.將選用展示的數據放在數組中

    一個數據列表,將選用展示的數據放在數組中,例如,下面一個簡單的數據結構式我們要展示的:

    const list = [
        { name: "qrcode", url: "https://www.npmjs.com/package/qrcode" },
        { name: "article", url: "https://juejin.cn/article" },
        {
          name: "remix-antd-admin",
          url: "https://github.com/yyong008/remix-antd-admin",
        },
      ];

    2. 實用 qrcode + canvas 將 url 裝換成 canvas 的二維碼圖片

    以下是批量得將 url 掛載到 body 后面:

    const gnVisiableCanvas = async () => {
        for (const item of list) {
          const canvas = document.createElement("canvas");
          canvas.style.display = "none";
          canvas.classList.add("__qrcode");
          canvas.setAttribute("name", item.name);
          await QRCode.toCanvas(canvas, item.url).catch((err) => {
    console.log("qr err", err);
          });
          document.body.appendChild(canvas);
        }
      };

    3.二維碼 cavans 元素們轉成 base64 數據保存在 zip 中

    將二維碼 cavans 元素們轉成 base64 數據保存在 zip 中,并保存到文件夾中

    const createQrCodeWithURL = async () => {
        const zip = new JSZip();
        const folder = zip.folder("創建文件夾")!;
        await gnVisiableCanvas();
        const qrs = document.querySelectorAll(".__qrcode");
        qrs.forEach((qr: any) => {
          const data = qr.toDataURL().substring(22); // canvas 轉換成 base64
          folder.file(qr.getAttribute("name") + ".png", data, {
    base64: true,
          });
        });
        const content = await folder
          .generateAsync({ type: "blob" }) // zip下載
          .then(function (content) {
    return content;
          });
        saveAs(content, "二維碼.zip"); // zip下載后的名字
      };
    • 將 canvas 轉換成 base64 數據,然后將 base64 數據保存到 zip 創建的 folder 中
    • folder 生成 generateAsync 內容 content, 然后將 content 保存 saveAs 下載下來

    4. 正對 React 進行封裝

    針對 React 封裝,我們需要考慮兩個大點:

    • 觸發下載器,一般是一個按鈕
    • 原始需要展示的數據

    下面是一個封裝的示例, 基于 React 和 Antd 的內容:

    import React from "react";
    import QRCode from "qrcode";
    import JSZip from "jszip";
    import { saveAs } from "file-saver";
    import { Button } from "antd";
    export default function QrCodeList({ trigger, list = [] }: any) {
      // canvas
      const gnVisiableCanvas = async () => {
        for (const item of list) {
          const canvas = document.createElement("canvas");
          canvas.style.display = "none";
          canvas.classList.add("__qrcode");
          canvas.setAttribute("name", item.name);
          await QRCode.toCanvas(canvas, item.url).catch((err) => {
    console.log("qr err", err);
          });
          document.body.appendChild(canvas);
        }
      };
      const destoryQrCodeWithURL = () => {
        const qrs = document.querySelectorAll(".__qrcode");
        qrs.forEach((qr: any) => {
          document.body.removeChild(qr);
        });
      };
      // 將 二維碼轉化成 圖片,然后放在壓縮包里面
      const createQrCodeWithURL = async () => {
        const zip = new JSZip();
        const folder = zip.folder("創建文件夾")!;
        await gnVisiableCanvas();
        const qrs = document.querySelectorAll(".__qrcode");
        qrs.forEach((qr: any) => {
          const data = qr.toDataURL().substring(22);
          folder.file(qr.getAttribute("name") + ".png", data, {
    base64: true,
          });
        });
        const content = await folder
          .generateAsync({ type: "blob" }) // zip下載
          .then(function (content) {
    return content;
          });
        saveAs(content, "二維碼.zip"); // zip下載后的名字
        destoryQrCodeWithURL();
      };
      const TriggerNew = () => {
        if (!trigger) {
          return (
    <Button type="primary" onClick={() => createQrCodeWithURL()}>
      批量生成二維碼
    </Button>
          );
        }
        return React.cloneElement(
          trigger,
          {
    onClick: () => {
      createQrCodeWithURL();
    },
          },
          trigger.props.children
        );
      };
      return <TriggerNew />;
    }

    5. 下載完畢

    繪制下載完畢之后,我們還需要將這些 dom 中的 html 元素找到并全部清理干凈。

    小結

    批量下載二維碼,一個很常見的應用場景,本質上實用 canvas 作用中間環節。然年實用 zip 壓縮等輔助工具將二維碼圖片放在壓縮包中存儲起來并下載。最后不要忘記移除之前的 canvas 等元素。

    以上就是根據 url 批量下載二維碼的詳細內容,更多關于根據 url 批量下載二維碼的資料請關注其它相關文章!

    標簽: JavaScript
    日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
    久久av在线| 日韩欧美中文在线观看| 免费在线观看日韩欧美| 一区二区三区四区日韩| 视频一区视频二区中文| 国产一区白浆| 中文在线日韩| 国产精品久久久久av蜜臀| 高清日韩中文字幕| av资源亚洲| 亚洲免费中文| 国产欧美日韩一级| 99精品小视频| 亚洲青青久久| 91精品二区| 精品一区在线| 亚洲手机视频| 99国产精品| 伊人久久亚洲影院| 日韩午夜电影| 久久精品av| 亚洲精品一二三区区别| 亚洲手机在线| 鲁大师成人一区二区三区| 欧美日韩水蜜桃| 亚洲欧美日韩国产| 综合一区在线| 国产精品免费99久久久| 成人国产精品一区二区免费麻豆| 爽好久久久欧美精品| 亚洲精品视频一二三区| 国产欧美日韩影院| 色综合五月天| 1024精品一区二区三区| 亚洲精品亚洲人成在线观看| 亚洲精品在线二区| 国产精品午夜av| 欧美日韩在线播放视频| 伊人久久大香伊蕉在人线观看热v| 日韩欧美美女在线观看| 精品国产18久久久久久二百| 香蕉久久99| 国产精品宾馆| 欧美日韩日本国产亚洲在线 | 久久国产精品美女| 免费看av不卡| 欧美视频二区| 欧美理论视频| 国产麻豆一区二区三区精品视频| 国产第一亚洲| 中文视频一区| 亲子伦视频一区二区三区| 亚洲91网站| 激情欧美一区| 精品国产aⅴ| 日韩三级精品| 视频一区二区不卡| 91看片一区| 欧美激情另类| 久久91视频| 欧美日韩亚洲一区在线观看| 黄色亚洲免费| 久久精品三级| 国产精品九九| 欧美在线黄色| 国产精品亚洲一区二区在线观看| 91精品蜜臀一区二区三区在线| 国产精品www.| 亚洲精品裸体| 亚洲a级精品| 亚洲色图国产| 99香蕉国产精品偷在线观看 | 一区二区精品伦理...| 国产精品久久久免费| 欧美有码在线| 国产毛片精品| 国产精品成人3p一区二区三区| 国产精品一卡| 精品免费在线| 久久久久一区| 欧美中文字幕| 中文字幕日韩亚洲| 只有精品亚洲| 日韩成人av影视| 欧美国产亚洲精品| 精品久久97| 青青久久av| 在线精品观看| 老鸭窝一区二区久久精品| 久久久久免费| 久久成人亚洲| 美女av一区| 在线综合亚洲| 国产精品一区二区三区www| 精品国产亚洲一区二区三区| 久久久精品午夜少妇| 亚洲欧美激情诱惑| 精品国产中文字幕第一页| 国精品一区二区| 国产精品天堂蜜av在线播放| 欧美激情福利| 国产精品日本一区二区不卡视频| 欧美二区视频| 日本午夜精品视频在线观看| 国产精品成人一区二区不卡| 性色av一区二区怡红| 国产精品99精品一区二区三区∴ | 婷婷精品久久久久久久久久不卡| 国产精品宾馆| 日韩在线一区二区| 涩涩av在线| 热久久久久久| 亚洲精品1区| 国产精品久久久一区二区| 久久九九精品| 精品视频网站| 欧美日韩1区2区3区| 亚洲福利国产| 成人三级高清视频在线看| 日本综合精品一区| 亚洲少妇在线| 国产一区日韩一区| 日韩伦理在线一区| 四季av一区二区凹凸精品| 久久激情综合网| 精品99久久| 国产精品久久久久久久久久久久久久久| 久久午夜视频| 国产精品普通话对白| 麻豆国产在线| 日韩欧美视频专区| 婷婷激情一区| 亚洲性色视频| 鲁大师影院一区二区三区| 女人av一区| 美女精品一区| 日本va欧美va精品发布| 视频一区日韩| 国产精品白浆| 久久精品导航| 免费人成在线不卡| 一区二区国产在线观看| 亚洲永久精品唐人导航网址| 亚洲精品激情| 国产一级成人av| 久久国产乱子精品免费女| 欧美高清一区| 亚洲精品中文字幕乱码| 日产欧产美韩系列久久99| 蜜桃av一区二区在线观看| 亚洲午夜黄色| 性欧美xxxx免费岛国不卡电影| 欧美精品二区| 欧美日韩一区二区三区在线电影| 久久xxxx| 视频一区视频二区中文字幕| 99精品美女| 好吊日精品视频| 视频精品一区| 中文字幕日韩欧美精品高清在线| 日韩激情精品| 国产亚洲一区| 国产精品夜夜夜| 色乱码一区二区三区网站| 国产亚洲精品v| 涩涩涩久久久成人精品| 日韩一区二区三区四区五区| 美女国产精品| 国产精品极品国产中出| 亚洲欧洲高清| 亚洲二区视频| 国产亚洲欧洲| 日本免费在线视频不卡一不卡二| 亚洲精品一级| 国产精品黄色片| 日韩高清成人| 欧美一区二区三区久久精品| 国产欧美三级| 天堂√8在线中文| 久久午夜影视| 日韩精品dvd| 日韩和欧美的一区| 黄色aa久久| 视频在线观看91| 免费观看亚洲天堂| 欧美 日韩 国产精品免费观看| 三级欧美在线一区| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 激情久久久久久久| 欧美日韩亚洲一区三区| 欧美大黑bbbbbbbbb在线| 久久中文字幕一区二区三区| 爽好久久久欧美精品| 亚洲成人不卡| 九九久久国产| 日韩在线播放一区二区| 亚洲精品一级二级| 免费高潮视频95在线观看网站| 国产伦一区二区三区| 日韩精品亚洲专区在线观看|