uniapp官方文档使用uni.downloadFile和 uni.saveFile实现下载文件资源到本地和永久保存,实现方法如下:
具体参数说明请参考官方文档: https://uniapp.dcloud.io/api/request/network-file.html

   // 文件下载
	uni.downloadFile({
		url: fileUrl,//下载资源的 url
		success: res => {
			console.log(res);
			if (res.statusCode === 200) {
				console.log('下载成功');
			}
			console.log(res.tempFilePath);
			//文件保存到本地
			uni.saveFile({
				tempFilePath: res.tempFilePath, //临时路径
				success: function(res) {
					console.log(res);
					uni.showToast({
						icon: 'none',
						mask: true,
						title: '文件已保存:' + res.savedFilePath, //保存路径
						duration: 3000
					});
					setTimeout(() => {
						//打开文档查看
						uni.openDocument({
							filePath: res.savedFilePath,
							success: function(res) {
								console.log('打开文档成功');
							},
							fail: function() {
								console.log('打开失败');
							}
						});
					}, 3000);
				},
				fail: function() {
					console.log('保存失败');
				}
			});
		},
		fail: function() {
			console.log('下载失败');
			uni.showToast({
				icon: 'none',
				mask: true,
				title: '失败请重新下载'
			});
		}
	});

使用后,下载的文件存放的位置一开始是临时的,转成永久的后它保存的位置在"内部存储\Android\data\io.dcloud.HBuilder\apps\HBuilder\doc\uniapp_save"里,用户很难找到正确位置,不方便操作,并且打开文件后,文件名被篡改了(无法确认下载的文件),还发现后续查看该文件只能再次下载,体验感非常不好。

于是,就想着用H5+API定义的应用沙盒里的plus.downloader来实现:

//注意:url是你要下载的文件路径,  xlsName(变量,随便命名) 是文件的后缀名,用于文件命名和格式修改
let dtask = plus.downloader.createDownload(url,{
	//1.本地路径开头使用file://;
	//2.Android平台本地绝对路径为"storage/emulated/0",就是用户文件管理器能看到的了;
	//3.创建"xxx"作为文件夹名称,后缀是用于文件命名和格式修改,大家可以使用变量。
	filename: 'file://storage/emulated/0/xxx/' + xlsName //利用保存路径,实现下载文件的重命名
	},function(d, status) {//d为下载的文件对象;status下载状态
		console.log(d)
		if (status == 200) {//下载成功
			console.log("下载成功")
			//d.filename是文件在保存在本地的相对路径,使用下面的API可转为平台绝对路径
			let fileSaveUrl = plus.io.convertLocalFileSystemURL(d.filename);
			plus.runtime.openFile(d.filename); //选择软件打开文件
		} else {//下载失败
			console.log("下载失败")
			plus.downloader.clear(); //清除下载任务
		}
	}
);
dtask.start();//启用

最终,用户能及时的打开文件,后续再想查看此文件,不用重复下载,直接在手机文件管理内准确的找到下载的文件,完美实现想要的效果

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐