ホームページ  >  記事  >  ウェブフロントエンド  >  WeChat ミニプログラムで複数のファイルのダウンロードを実装する方法

WeChat ミニプログラムで複数のファイルのダウンロードを実装する方法

亚连
亚连オリジナル
2018-06-09 10:09:324812ブラウズ

この記事では主に、WeChat ミニ プログラムで複数のファイルをダウンロードするための簡単なカプセル化の例を紹介します。

要件

友達のサークルで共有するには、プロモーション画像を生成する必要があります。このプロモーション画像には、QR コード、さまざまな背景画像、さまざまなテキストが含まれています。この種の画像生成には、サーバーサイド生成を使用することも検討しましたが、サーバーのパフォーマンスをより多く消費するため、最終的にローカル生成を使用することにしました。

まず、ミニプログラムには制限があり、パッケージは2mを超えることはできず、複数の背景画像がある可能性があるため、背景画像とQRコード画像をサーバーに配置することでサイズを削減する予定ですミニプログラムパッケージの背景画像を柔軟に切り替えます。

共有画像を描画する場合、インターネットアドレスを直接使用できますが、問題が発生したため画像を生成できない可能性があるため、画像ファイルをダウンロードする必要があります。

WeChat にはファイルをダウンロードするための API がありますが、ファイルの一時パスを返します。これはミニ プログラムの現在の起動中にのみ通常使用できます。ファイルを永続的に保存する必要がある場合は、積極的に wx を呼び出す必要があります。次回ミニ プログラムが開始される前に saveFile が起動時にアクセスされます。

そこで、まずダウンロードしたファイルと保存したファイルをカプセル化します

ダウンロードをカプセル化してファイルを保存します

このメソッドは比較的単純です

パラメータ:

  1. id を含むオブジェクト渡されない場合はダウンロードする必要があります。デフォルトはダウンロード URL です。ID が必要な理由は、ダウンロードが 1 つのファイルであることを区別できるためです。ダウンロードされたファイル (WeChat アプレットのバックグラウンド設定が必要です。具体的な設定方法は WeChat 公式ドキュメントを参照してください)

  2. success 成功コールバックの戻りパラメータは、id、savedFilePath を含むオブジェクトです

  3. fail 失敗コールバック、ダウンロード失敗、および保存はすべて失敗とみなされます

  4. /**
     * 下载保存一个文件
     */
    function downloadSaveFile(obj) {
      let that = this;
      let success = obj.success;
      let fail = obj.fail;
      let id = "";
      let url = obj.url;
      if (obj.id){
        id = obj.id;
      }else{
        id = url;
      }
      // console.info("%s 开始下载。。。", obj.url);
      wx.downloadFile({
        url: obj.url,
        success: function (res) {
          wx.saveFile({
            tempFilePath: res.tempFilePath,
            success: function (result) {
              result.id = id;
              if (success) {
                success(result);
              }
            },
            fail: function (e) {
              console.info("保存一个文件失败");
              if (fail) {
                fail(e);
              }
            }
          })
        },
        fail: function (e) {
          console.info("下载一个文件失败");
          if (fail) {
            fail(e);
          }
        }
      })
    }

    ダウンロード メソッド (wx.downloadFile( obj)) を使用します。 WeChat ミニ プログラムでサーバー ドメイン名を構成する必要があります。 ミニ プログラムのバックグラウンドでサーバー ドメイン名を構成してください。詳細については、WeChat の公式ドキュメントを参照してください

複数のファイルをカプセル化してダウンロードして保存します

詳細 ファイルをダウンロードして保存する前に、すべてのファイルが正常にダウンロードされている必要があります。戻りは成功です パラメータ:

url ダウンロード アドレスの配列を含むオブジェクト。複数の URL ダウンロードをサポートします [url1, url2]

  1. success ダウンロード 成功 (成功したとみなされるには、すべてのファイルが正常にダウンロードされる必要があります)コールバック パラメーター マップ、key(id) -> value ({id,savedFilePath})

  2. fail ダウンロードが失敗した場合、1 つのメソッドが失敗する限り呼び出しは失敗します

  3. /**
     * 多文件下载并且保存,强制规定,必须所有文件下载成功才算返回成功
     */
    function downloadSaveFiles(obj) {
      // console.info("准备下载。。。");
      let that = this;
      let success = obj.success; //下载成功
      let fail = obj.fail; //下载失败
      let urls = obj.urls; //下载地址 数组,支持多个 url下载 [url1,url2]
      let savedFilePaths = new Map();
      let urlsLength = urls.length; // 有几个url需要下载
      for (let i = 0; i < urlsLength; i++) {
        downloadSaveFile({
          url: urls[i],
          success: function (res) {
            //console.dir(res);
            //一个文件下载保存成功
            let savedFilePath = res.savedFilePath;
                    
            savedFilePaths.set(res.id, res);
            console.info("savedFilePath:%s", savedFilePath);
            if (savedFilePaths.size == urlsLength) { //如果所有的url 才算成功
              if (success){
                success(savedFilePaths)
              }
              
            }
          },
          fail: function (e) {
            console.info("下载失败");
            if (fail) {
              fail(e);
            }
    
          }
        })
      }
    }

    download.js ファイルを完了します

    /**
     * 下载管理器
     * Created by 全科 on 2018/1/27.
     */
    /**
     * 下载保存一个文件
     */
    function downloadSaveFile(obj) {
      let that = this;
      let success = obj.success;
      let fail = obj.fail;
      let id = "";
      let url = obj.url;
      if (obj.id){
        id = obj.id;
      }else{
        id = url;
      }
      // console.info("%s 开始下载。。。", obj.url);
      wx.downloadFile({
        url: obj.url,
        success: function (res) {
          wx.saveFile({
            tempFilePath: res.tempFilePath,
            success: function (result) {
              result.id = id;
              if (success) {
                success(result);
              }
            },
            fail: function (e) {
              console.info("保存一个文件失败");
              if (fail) {
                fail(e);
              }
            }
          })
    
        },
        fail: function (e) {
          console.info("下载一个文件失败");
          if (fail) {
            fail(e);
          }
    
        }
      })
    }
    /**
     * 多文件下载并且保存,强制规定,必须所有文件下载成功才算返回成功
     */
    function downloadSaveFiles(obj) {
      // console.info("准备下载。。。");
      let that = this;
      let success = obj.success; //下载成功
      let fail = obj.fail; //下载失败
      let urls = obj.urls; //下载地址 数组,支持多个 url下载 [url1,url2]
      let savedFilePaths = new Map();
      let urlsLength = urls.length; // 有几个url需要下载
      for (let i = 0; i < urlsLength; i++) {
        downloadSaveFile({
          url: urls[i],
          success: function (res) {
            console.dir(res);
            //一个文件下载保存成功
            let savedFilePath = res.savedFilePath;                
            savedFilePaths.set(res.id, res);
            console.info("savedFilePath:%s", savedFilePath);
            if (savedFilePaths.size == urlsLength) { //如果所有的url 才算成功
              if (success){
                success(savedFilePaths)
              }          
            }
          },
          fail: function (e) {
            console.info("下载失败");
            if (fail) {
              fail(e);
            }
          }
        })
      }
    }
    module.exports = {
      downloadSaveFiles: downloadSaveFiles
    }
を使用するには、まず

import download from "download.js"

をインポートしてから、

let url1 = &#39;https://xcx.upload.utan.com/article/coverimage/2018/01/25/eyJwaWMiOiIxNTE2ODU2Nzc0Njk3OCIsImRvbWFpbiI6InV0YW50b3V0aWFvIn0=&#39;;
let url2 = &#39;https://xcx.upload.utan.com/article/coverimage/2018/01/26/eyJwaWMiOiIxNTE2OTcyNDg0NDUzOSIsImRvbWFpbiI6InV0YW50b3V0aWFvIn0=&#39;;
download.downloadSaveFiles({
  urls: [url1, url2],
  success: function (res) {
    // console.dir(res);
   
    console.info(res.get(url2).savedFilePath)
  },
  fail: function (e) {
    console.info("下载失败");
  }
);
を呼び出します。 上記は、将来的に皆さんの役に立つことを願ってまとめたものです。

関連記事:

vueでページに戻りスクロール位置を記憶するスクローラーを実装する方法

JavaScriptでの共通ツールクラスのカプセル化を詳しく紹介(詳細チュートリアル)

はじめにvue のソースコードエントリーファイルへの詳細 (詳細なチュートリアル)

以上がWeChat ミニプログラムで複数のファイルのダウンロードを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。