小程序下载PDF文件并保存在本地(适用IOS安卓)

项目需要要做个下载功能,下载PDF版发票并保存在本地文件中。
下载文件:用uni.downloadFile或wx.downloadFile下载文件,拿到返回文件的本地临时路径。
保存文件:
1.IOS端
ios不能直接下载在本地,需用用户自己复制下载链接,后在Safari浏览器中预览下载。js功能代码如下:

	//先弹窗提醒用户复制链接
	uni.showModal({
		title: '复制发票链接',
		content: '请点击确定,复制发票链接,在Safari浏览器中预览下载',
		showCancel: false,
		success: function (res) {
			if (res.confirm) {
				this.copyLink(item)
			}
		}
	});
	//复制链接
	copyLink(item){
		uni.setClipboardData({
			data: item,   // 要复制的路径
			success: function(res) {
				uni.getClipboardData({
					success: function(data) {
						uni.showToast({
							title: '复制成功'
						});
					},
					fail: function(data1) {
						console.log(data1,'复制回调');						
					}
				});
			}
		});
	}

2.安卓端
存储文件的话,建议使用FileSystemManager对象中的方法,旧的uni.saveFile不维护了。
FileSystemManager是微信小程序文件管理器,通过 wx.getFileSystemManager 获取。但是保存文件后,返回的存储后的文件路径 (本地路径)格式是wxfile://store_eXXXXXXX,很难找到,在网上看华为手机存储的路径有三个,三个路径“tencent/MicroMsg/WeiXin”、“tencent/MicroMsg/Download”、“Android/data/com.tencent.mm/MicroMsg/Download”,在手机上没找到,所以用了别的方法。
方法:使用wx.getFileSystemManager().saveFile下载文件,再使用wx.openDocument()打开文件,配置一定要加上showMenu字段,这样打开预览的文件右上角就会出现···,点击···即可保存文件。这样文件会直接保存在手机下载管理器中,非常容易找到。
具体使用的js功能代码如下:

	uni.downloadFile({
		url: item,// 文档地址
		success: (data) => {
			if (data.statusCode == 200) {
				wx.getFileSystemManager().saveFile({
					tempFilePath: data.tempFilePath, //临时路径
					success: function (res) {// 保存路径
						wx.openDocument({
							filePath: res.savedFilePath,
							showMenu: true,
							success: function(res) {
							},
							fail(error) {}
						})
					}
				});
			}
		}, fail: (err) => { 
			showToast("失败请重新下载" )
		},
	});

猜你喜欢

转载自blog.csdn.net/duruo0/article/details/133046448