上一篇 uni-app:web-view实现文件(非图片视频文件)上传与下载,末尾对于文件采用了触发a标签的方式进行下载,虽然可行,但难免有点low。后来考虑到我们上传的文件名称在后端被篡改(时间戳+随机数),但是当用户进行下载时,最好的体验应该是文件名称不变,这时可以用html5plus中的plus.downloader.createDownload进行文件下载,重命名。具体用法如下:
plus.downloader.createDownload(url,options,completedCB)
说明:请求下载管理创建新的下载任务,创建成功则返回DOwnload对象,用于管理下载任务。
- url:文件所在的资源地址(仅支持网络资源地址,支持HTTP或HTTPS协议,允许创建多个相同的url地址的下载任务。注意,若url中含有空格或中文,请使用urlencode转换)
- options:可用来设置下载任务属性,如保存路径、下载优先级等。
参数 | 说明 |
---|---|
method 网络请求类型 | (String 类型 )支持http协议的GET、POST,默认为GET |
data | (String 类型 )POST请求时提交的数据 |
filename | (String 类型 )下载文件的保存路径,具体的路径支持请查看官方文档 |
priority | (Number 类型 )下载任务的优先级 |
timeout | (Number 类型 )下载任务超时时间(指服务器响应请求的时间,而不是完成下载的总时间),默认120s |
retry | (Number 类型 )下载任务重试次数,默认3次 |
retryInterval | (Number 类型 )下载任务重试间隔时间,默认30s |
- completedCB:下载任务完成回调函数,成功失败都会触发
var name = test.doc; //文件名称可以在上传时进行保存,下载时取出,当文件名称中存在单双引号时,要做好处理,否则会报错
var dtask = plus.downloader.createDownload(url,{
filename:"_downloads/"+name //利用保存路径,实现下载文件的重命名
},function(d,status){
//d为下载的文件对象
if(status==200){
//下载成功,d.filename是文件在保存在本地的相对路径,使用下面的API可转为平台绝对路径
var fileSaveUrl = plus.io.convertLocalFileSystemURL(d.filename);
plus.runtime.openFile(d.filename); //选择软件打开文件
}else{
//下载失败
plus.downloader.clear(); //清除下载任务
}
})
dtask.start();