需求分析

最近优化了个原先写过的需求,回头复习复习小程序的 API
是这样的,我需要下载一个文件并打开此文件
优化:记录是否被下载过,如果下载过就直接打开

获取文件下载链接,打开文件

微信官方给的 wx.downloadFile() API 使用手册。

wx.downloadFile({
    url: `${pic.meetingUrl}/weixin/noticeStart/downLoad/${this.selectItem.recordId}`, // 下载资源的 url
    success: (res) => {
	    wx.openDocument({
		    filePath: res.tempFilePath, // 文件路径,可通过 downloadFile 获得,
		    fileType: 'pdf', // 写下载后的文件的格式,这里距离是pdf
		    success: (res) => {
		        
		    },
		    fail: (error) => {
		        
		    },
		});
    },
    fail: () => {},
    complete: () => {},
});

优化

思路:保存下载后的文件,保存其路径到本地缓存,然后下次打开的时候判断一下本地缓存里是否有,如果有就打开,本地缓存没有的话,就先下载在打开。

const that = this;
const cacheFilePath = wx.getStorageSync(
    `filePath-${this.selectItem.recordId}`
);
// 先判断这个文件是否下载过
// 如果下载过,尝试通过缓存,打开文件
// 否则就要下载,下载成功后保存本地缓存(临时路径信息),命名规则为 filePath + recordId
if (cacheFilePath) {
    wx.openDocument({
        filePath: cacheFilePath, //文件路径,可通过 downFile 获得,
        fileType: this.selectItem.fileType, // 获取文件格式
        success: (res) => {
            
        },
        fail: (error) => {
            
        },
    });
} else {
    wx.showLoading({
        title: "下载中",
        mask: true,
    });
    wx.downloadFile({
        url: `${pic.meetingUrl}/weixin/noticeStart/downLoad/${this.selectItem.recordId}`, // 下载资源的 url
        success: (res) => {
            // 隐藏 loading
            wx.hideLoading();
            // 下载成功后,保存文件路径到本地缓存
            wx.setStorageSync(
                `filePath-${this.selectItem.recordId}`,
                `${res.tempFilePath}`
            );
            // 尝试打开下载后的文件
            wx.openDocument({
                filePath: res.tempFilePath, //文件路径,可通过 downFile 获得,
                fileType: this.selectItem.fileType, // 获取文件格式
                success: (res) => {
                    
                },
                fail: (error) => {
                    
                },
            });
        },
        fail: () => {},
        complete: () => {},
    });
}
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐