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

演示.gif
流程梳理
獲取圖片遠(yuǎn)程地址數(shù)組-->遍歷拿到圖片緩存(臨時(shí)地址)(wx.getImageInfo)-->保存緩存圖片到本地(wx.saveImageToPhotosAlbum)
完整代碼
子組件代碼邏輯
//子組件download-file.vue
<template>
<div></div>
</template>
<script>
export default {
props: {
urls: {
default: ""http://通過(guò)父組件傳遞遠(yuǎn)程圖片路徑數(shù)組
}
},
watch: {
urls() {
if (this.urls.length > 0) {
this.downLoadImage(this.urls);//監(jiān)聽(tīng)變化
}
}
},
methods: {
//拿到圖片的臨時(shí)路徑
getImageInfo(url) {
var cache = {};
return new Promise((resolve, reject) => {
/* 獲得要在畫(huà)布上繪制的圖片 */
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;
},
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(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)圖片遇到的問(wèn)題及解決方法
- 解決vue-quill-editor上傳內(nèi)容由于圖片是base64的導(dǎo)致字符太長(zhǎng)的問(wèn)題
- 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 通過(guò)base64實(shí)現(xiàn)圖片下載功能
相關(guān)文章
如何使用vue開(kāi)發(fā)公眾號(hào)網(wǎng)頁(yè)
因?yàn)轫?xiàng)目需要,近期做了一個(gè)公眾號(hào)網(wǎng)頁(yè)開(kāi)發(fā)。在此期間也踩了一些坑,解決這些坑之后,準(zhǔn)備對(duì)這個(gè)項(xiàng)目進(jìn)行復(fù)盤。記錄下項(xiàng)目從開(kāi)發(fā)到上線所解決的問(wèn)題,并對(duì)使用vue進(jìn)行公眾號(hào)開(kāi)發(fā)的步驟進(jìn)行一個(gè)總結(jié)。方便以后有問(wèn)題進(jìn)行查閱。希望對(duì)你有所幫助2021-05-05
vue3?+?element-plus?的?upload?+?axios?+?django?實(shí)現(xiàn)文件上
這篇文章主要介紹了vue3?+?element-plus?的?upload?+?axios?+?django?文件上傳并保存,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01
fullcalendar日程管理插件月份切換回調(diào)處理方案
這篇文章主要為大家介紹了fullcalendar日程管理插件月份切換回調(diào)處理的方案示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03
基于vue-draggable 實(shí)現(xiàn)三級(jí)拖動(dòng)排序效果
這篇文章主要介紹了基于vue-draggable 實(shí)現(xiàn)三級(jí)拖動(dòng)排序效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01
Vue+Element實(shí)現(xiàn)動(dòng)態(tài)生成新表單并添加驗(yàn)證功能
這篇文章主要介紹了Vue+Element實(shí)現(xiàn)動(dòng)態(tài)生成新表單并添加驗(yàn)證功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05
vue3引入ElementUI報(bào)錯(cuò)問(wèn)題及解決
這篇文章主要介紹了vue3引入ElementUI報(bào)錯(cuò)問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
Vue的Eslint配置文件eslintrc.js說(shuō)明與規(guī)則介紹
最近在跟著視頻敲項(xiàng)目時(shí),代碼提示出現(xiàn)很多奇奇怪怪的錯(cuò)誤提示,百度了一下是eslintrc.js文件沒(méi)有配置相關(guān)命令,ESlint的語(yǔ)法檢測(cè)真的令人抓狂,現(xiàn)在總結(jié)一下這些命令的解釋2020-02-02
vue 實(shí)現(xiàn)網(wǎng)頁(yè)截圖功能詳解
這篇文章主要介紹了通過(guò)vue實(shí)現(xiàn)網(wǎng)頁(yè)截圖的功能,有興趣的童鞋可以了解一下2021-11-11

