詳解基于mpvue微信小程序下載遠(yuǎn)程圖片到本地解決思路
說明
最近有些空余時(shí)間開始著手優(yōu)化我那個(gè)吉他自學(xué)小助手的微信小程序,其中有一個(gè)功能是下載吉他譜到本地,開始以為只是很簡單的拿到圖片url然后down下來就好了,其實(shí)不然...最終通過google解決了這個(gè)問題,現(xiàn)在記錄一下,以便后續(xù)翻閱。
少廢話先看東西

演示.gif
流程梳理
獲取圖片遠(yuǎn)程地址數(shù)組-->遍歷拿到圖片緩存(臨時(shí)地址)(wx.getImageInfo)-->保存緩存圖片到本地(wx.saveImageToPhotosAlbum)
完整代碼
子組件代碼邏輯
//子組件download-file.vue
<template>
<div></div>
</template>
<script>
export default {
props: {
urls: {
default: ""http://通過父組件傳遞遠(yuǎn)程圖片路徑數(shù)組
}
},
watch: {
urls() {
if (this.urls.length > 0) {
this.downLoadImage(this.urls);//監(jiān)聽變化
}
}
},
methods: {
//拿到圖片的臨時(shí)路徑
getImageInfo(url) {
var cache = {};
return new Promise((resolve, reject) => {
/* 獲得要在畫布上繪制的圖片 */
if (cache[url]) {
resolve(cache[url]);
} else {
const objExp = new RegExp(
/^http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/
);
if (objExp.test(url)) {
wx.getImageInfo({
src: url,
complete: res => {
if (res.errMsg === "getImageInfo:ok") {
cache[url] = res.path;
resolve(res.path);
} else {
reject(new Error("getImageInfo fail"));
}
}
});
} else {
this.cache[url] = url;
resolve(url);
}
}
});
},
downLoadImage(urls) {
const vm = this;
let temp = [];
if (urls.length > 0) {
urls.map((item, index) => {
vm.getImageInfo(item).then(res => {
temp.push(res);
vm.saveImageToLocal(res);
});
});
}
},
saveImageToLocal(path) {
//保存臨時(shí)圖片到本地
wx.saveImageToPhotosAlbum({
filePath: path,
success(res) {
console.log("success");
},
fail: function(res) {
console.log(res);
}
});
}
}
};
</script>
<style>
</style>
在父組件中引用
//news/detail.vue
//省略代碼...
<button @click="download">下載</button>
//省略代碼...
<download-file :urls="downLoadUrls" ref="myDownload"></download-file>
//省略代碼...
async download() {
let vm = this;
const temp = [];
let data = await vm.$net.get(vm.$apis.articleDetails, {
id: vm.item.id
});
if (data.article.body.length > 0) {
data.article.body.map((item, index) => {
if (item.type == "img") {
temp.push(item.data);
}
});
}
vm.downLoadUrls = temp;
},
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Vue+Java+Base64實(shí)現(xiàn)條碼解析的示例
- 在vue中使用Base64轉(zhuǎn)碼的案例
- VueQuillEditor富文本上傳圖片(非base64)
- Vue實(shí)現(xiàn)base64編碼圖片間的切換功能
- Vue項(xiàng)目pdf(base64)轉(zhuǎn)圖片遇到的問題及解決方法
- 解決vue-quill-editor上傳內(nèi)容由于圖片是base64的導(dǎo)致字符太長的問題
- vue.js圖片轉(zhuǎn)Base64上傳圖片并預(yù)覽的實(shí)現(xiàn)方法
- vue項(xiàng)目base64字符串轉(zhuǎn)圖片的實(shí)現(xiàn)代碼
- vue下載二進(jìn)制流圖片操作
- vue將文件/圖片批量打包下載zip的教程
- Vue使用Canvas繪制圖片、矩形、線條、文字,下載圖片
- vue 通過base64實(shí)現(xiàn)圖片下載功能
相關(guān)文章
vue實(shí)現(xiàn)todolist基本功能以及數(shù)據(jù)存儲功能實(shí)例詳解
本文通過實(shí)例代碼給大家介紹了vue實(shí)現(xiàn)todolist基本功能以及數(shù)據(jù)存儲功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04
iview-table組件嵌套input?select數(shù)據(jù)無法雙向綁定解決
這篇文章主要為大家介紹了iview-table組件嵌套input?select數(shù)據(jù)無法雙向綁定解決示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
vue項(xiàng)目使用高德地圖時(shí)報(bào)錯(cuò):AMap?is?not?defined解決辦法
這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目使用高德地圖時(shí)報(bào)錯(cuò):AMap?is?not?defined的解決辦法,"AMap is not defined"是一個(gè)錯(cuò)誤提示,意思是在代碼中沒有找到定義的AMap,需要的朋友可以參考下2023-12-12
vue項(xiàng)目中使用eslint+prettier規(guī)范與檢查代碼的方法
這篇文章主要介紹了vue項(xiàng)目中使用eslint+prettier規(guī)范與檢查代碼的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
深入探索VueJS Scoped CSS 實(shí)現(xiàn)原理
這篇文章主要介紹了深入探索VueJS Scoped CSS 實(shí)現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
vue-cli-service serve報(bào)錯(cuò)error:0308010C:digital enve
這篇文章主要介紹了vue-cli-service serve報(bào)錯(cuò)error:0308010C:digital envelope routines::unsupported的解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06

