uniapp下载文件到手机自定义目录实现
uniapp官方文档使用uni.downloadFile和 uni.saveFile实现下载文件资源到本地和永久保存,实现方法如下:具体参数说明请参考官方文档: https://uniapp.dcloud.io/api/request/network-file.html// 文件下载uni.downloadFile({url: fileUrl,//下载资源的 urlsuccess: res =&g
·
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();//启用
最终,用户能及时的打开文件,后续再想查看此文件,不用重复下载,直接在手机文件管理内准确的找到下载的文件,完美实现想要的效果
更多推荐
已为社区贡献5条内容
所有评论(0)