需求:
点击预览图标查看该pdf报告
问题:
1、最早是直接将请求到的url放入到<web-view src="{{realUrl}}"></web-view>
中展示,ios可以,安卓显示无法查看。
2、通过微信自身的API实现:wx.downloadFile({})、wx.saveFile({})、wx.openDocument({})
3、对于文件较大的,下载较慢,需要点击过的进行缓存,再次点击无需下载,直接打开。
将点击过的下载的url添加给list的temUrl,再次点击的时候判断该行是否存在temUrl,存在的话则直接wx.openDocument({})
打开该url;不存在的话则先下载保存再去打开。当退出该页面时,缓存消失,因为是给list列表添加新的属性保存url,如果再次进入刷新页面则请求到的数据会重新给list进行赋值。
<view bindtap="onLoadClick" data-id="{{item.id}}" data-name="{{item.fileName}}"><image class="downLoad" src="../../../images/preview-open.png"></image></view>
downloadfile: function (url, name, id) {
let list = this.data.list
let falg
let listUrl
list.find(item => {
if (item.id === id) {
falg = item.hasOwnProperty('temUrl')
listUrl = item.temUrl
}
})
//下载文件,生成临时地址
wx.showLoading({
title: '下载中',
})
if (falg) {
//保存到本地
wx.openDocument({
filePath: listUrl,
fileType: 'pdf',
success: function (res) {
wx.hideLoading()
},
fail: function (err) {
wx.hideLoading()
},
// showMenu: true
})
} else {
wx.downloadFile({
url: url,
success(res) {
//保存到本地
wx.saveFile({
tempFilePath: res.tempFilePath,
id: id,
// 给文件重命名
filePath:wx.env.USER_DATA_PATH+'/' + name,
success: function (res) {
wx.hideLoading()
const savedFilePath = res.savedFilePath;
list.find(item => {
if (item.id === id) {
item.temUrl = savedFilePath
}
})
// 打开文件
wx.openDocument({
filePath: savedFilePath,
fileType: 'pdf',
success: function (res) {
// console.log('打开文档成功')
},
fail: function (err) {
wx.hideLoading()
// console.log('打开失败:', err)
},
// showMenu: true
})
},
fail: function (err) {
hideLoad()
wx.showModal({
title: '提示',
content: '小程序暂不支持此类型文件预览',
showCancel: false,
success (res) {
if (res.confirm) {
// console.log('用户点击确定')
} else if (res.cancel) {
// console.log('用户点击取消')
}
}
})
}
});
}
})
}
this.setData({
"list": list
})
// console.log('lits', list)
},
getListDetail: function (query) {
util.dataInformation('加载中', `/file/view`, 'GET', query, res => {
if (res.data.data) {
let data = res.data.data
// console.log('data', data)
this.setData({
"url": data
})
this.downloadfile(data, this.data.name, this.data.urlParams.id)
}
})
},
onLoadClick: function (e) {
let id = e.currentTarget.dataset.id
this.setData({
"urlParams.id": id,
"name": e.currentTarget.dataset.name
})
this.getListDetail(this.data.urlParams)
},
参考文章:
小程序web-view打开PDF格式文件的安卓苹果兼容性问题
微信小程序web-view安卓提示无法打开页面为什么?
微信小程序-WX.DOWNLOADFILE()文件管理之下载、打开、重命名
getSavedFileList返回fileList为空
wx.saveFile(Object object)