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

微信小程序之多文件下載的簡單封裝示例

 更新時間:2018年01月29日 13:55:37   作者:quanke_  
本篇文章主要介紹了微信小程序之多文件下載的簡單封裝示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

需求

需要生成一個宣傳的圖片分享到朋友圈,這個宣傳圖片包含二維碼,包含不同的背景圖片和不同的文字。對于這種圖片生成,我們考慮過使用服務(wù)端生成,但是這樣會比較耗服務(wù)器性能,所以最終決定使用本地生成。

首先小程序有一個限制,包不能大于2m,而且我們可能多個背景圖,所以計劃把背景圖和二維碼圖片放在服務(wù)端,這樣可以減少小程序包的大小,也可以靈活的切換背景圖。

在繪制分享圖的時候,可以直接使用互聯(lián)網(wǎng)地址,但是遇到了一個問題,有可能不能生成圖片,所以我們需要把這個圖片文件下載下來。

下載文件的方法微信有API,但是返回的是文件的臨時路徑,只在小程序本次啟動期間可以正常使用,如需持久保存,需在主動調(diào)用 wx.saveFile,才能在小程序下次啟動時訪問得到。

所以我們先把下載文件和保存文件封裝

封裝下載并且保存一個文件

這個方法比較簡單

參數(shù):一個對象,包含

  1. id 需要下載文件的id,如果不傳默認(rèn)是下載的url,之所以需要id,是因為我們要做多文件下載,可以區(qū)分下載的是一個文件
  2. url 下載文件的網(wǎng)絡(luò)地址(需要微信小程序后臺配置,具體配置方法請參考微信官方文檔)
  3. success 成功回調(diào) 返回參數(shù)是一個對象 包含 id,savedFilePath
  4. fail 失敗回調(diào) ,下載失敗,保存都是都算失敗
/**
 * 下載保存一個文件
 */
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))需要在微信小程序配置服務(wù)器域名,服務(wù)器域名請在 小程序后臺-設(shè)置-開發(fā)設(shè)置-服務(wù)器域名 中進(jìn)行配置 ,具體請參考 微信官方文檔

封裝多文件下載并且保存

多文件下載并且保存,強制規(guī)定,必須所有文件下載成功才算返回成功

參數(shù):一個對象,包含

  1. urls 下載地址 數(shù)組,支持多個 url下載 [url1,url2]
  2. success 下載成功 (必須所有文件下載成功才算返回成功) 回調(diào)參數(shù) map ,key(id) -> value ({id,savedFilePath})
  3. fail 下載失敗,只要有一個方法失敗就調(diào)用失敗
/**
 * 多文件下載并且保存,強制規(guī)定,必須所有文件下載成功才算返回成功
 */
function downloadSaveFiles(obj) {
  // console.info("準(zhǔn)備下載。。。");
  let that = this;
  let success = obj.success; //下載成功
  let fail = obj.fail; //下載失敗
  let urls = obj.urls; //下載地址 數(shù)組,支持多個 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);
      }

    }
  })
}
/**
 * 多文件下載并且保存,強制規(guī)定,必須所有文件下載成功才算返回成功
 */
function downloadSaveFiles(obj) {
  // console.info("準(zhǔn)備下載。。。");
  let that = this;
  let success = obj.success; //下載成功
  let fail = obj.fail; //下載失敗
  let urls = obj.urls; //下載地址 數(shù)組,支持多個 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
}

使用

首先導(dǎo)入

import download from "download.js"

之后調(diào)用

let url1 = 'https://xcx.upload.utan.com/article/coverimage/2018/01/25/eyJwaWMiOiIxNTE2ODU2Nzc0Njk3OCIsImRvbWFpbiI6InV0YW50b3V0aWFvIn0=';
let url2 = 'https://xcx.upload.utan.com/article/coverimage/2018/01/26/eyJwaWMiOiIxNTE2OTcyNDg0NDUzOSIsImRvbWFpbiI6InV0YW50b3V0aWFvIn0=';
download.downloadSaveFiles({
  urls: [url1, url2],
  success: function (res) {
    // console.dir(res);
   
    console.info(res.get(url2).savedFilePath)
  },
  fail: function (e) {
    console.info("下載失敗");
  }
);

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 代碼生成器 document.write()

    代碼生成器 document.write()

    代碼生成器 document.write()...
    2007-04-04
  • uniapp微信小程序?qū)崿F(xiàn)一個頁面多個倒計時

    uniapp微信小程序?qū)崿F(xiàn)一個頁面多個倒計時

    這篇文章主要為大家詳細(xì)介紹了uniapp微信小程序?qū)崿F(xiàn)一個頁面多個倒計時,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 解決layui調(diào)用自定義方法提示未定義的問題

    解決layui調(diào)用自定義方法提示未定義的問題

    今天小編就為大家分享一篇解決layui調(diào)用自定義方法提示未定義的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 微信小程序自定義Dialog彈框

    微信小程序自定義Dialog彈框

    這篇文章主要為大家詳細(xì)介紹了微信小程序自定義Dialog彈框,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 使用JS+plupload直接批量上傳圖片到又拍云

    使用JS+plupload直接批量上傳圖片到又拍云

    本文詳細(xì)介紹了通過js+plupload實現(xiàn)了繞過服務(wù)器,向又拍云批量上傳圖片的解決方法,十分的巧妙,也節(jié)省了服務(wù)器資源,這里推薦給有需要的小伙伴。
    2014-12-12
  • 純JavaScript實現(xiàn)猜數(shù)字游戲

    純JavaScript實現(xiàn)猜數(shù)字游戲

    這篇文章主要為大家詳細(xì)介紹了純JavaScript實現(xiàn)猜數(shù)字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • JS判斷微信掃碼的方法

    JS判斷微信掃碼的方法

    這篇文章通過代碼給大家介紹了JS判斷是否是微信掃碼的方法,非常不錯,需要的朋友參考下吧
    2017-08-08
  • 純JS實現(xiàn)旋轉(zhuǎn)圖片3D展示效果

    純JS實現(xiàn)旋轉(zhuǎn)圖片3D展示效果

    本文給大家分享的是純js實現(xiàn)的類似flash里的圖片環(huán)繞旋轉(zhuǎn)效果,非常炫酷,有需要的小伙伴可以參考下。
    2015-04-04
  • bootstrap側(cè)邊欄圓點導(dǎo)航

    bootstrap側(cè)邊欄圓點導(dǎo)航

    這篇文章主要為大家詳細(xì)介紹了bootstrap側(cè)邊欄圓點導(dǎo)航效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 微信小程序中單位rpx和rem的使用

    微信小程序中單位rpx和rem的使用

    rpx是微信小程序新推出的一個單位,按官方的定義,rpx可以根據(jù)屏幕寬度進(jìn)行自適應(yīng),在rpx出現(xiàn)之前,web頁面的自適應(yīng)布局已經(jīng)有了多種解決方案,為什么微信還搗鼓出新的rpx單位?下面通過這篇文章來一起看看吧。
    2016-12-12

最新評論

景洪市| 满城县| 蕉岭县| 会理县| 鄂温| 公主岭市| 霍城县| 于都县| 东乡县| 平湖市| 涡阳县| 柯坪县| 珠海市| 长岛县| 南京市| 阿拉善右旗| 安阳市| 德阳市| 平武县| 修武县| 大渡口区| 隆子县| 清丰县| 黎城县| 城固县| 广水市| 宁阳县| 龙岩市| 吉木乃县| 清原| 廉江市| 都昌县| 镇巴县| 余姚市| 色达县| 二连浩特市| 天峻县| 昂仁县| 海伦市| 百色市| 利津县|