前言
在vue中用h5+plus下载文件并自动打开相应的应用程序
一、使用步骤
1.前端下载文件并打开应用方法
export default{
//下载文件并查看
_downFile(item){
let docBizNo = item.docBizNo;
let docNo = item.docNo;
let docName = item.docName;
let FileSystemURL = '_downloads/' + docName;
plus.io.resolveLocalFileSystemURL(FileSystemURL, function(entry) {
plus.nativeUI.showWaiting("下载中");
if(entry.isFile) {
entry.remove();
let dtask = plus.downloader.createDownload(config.url + "/getFileDownload?docNo=" + docNo + "&docBizNo=" + docBizNo, {
method: "GET",
filename:FileSystemURL //利用保存路径,实现下载文件的重命名
}, function(d, status) {
// 下载完成
if(status == 200) {
plus.nativeUI.closeWaiting();
plus.runtime.openFile(d.filename, {}, function(e) { //调用第三方应用打开文件
alert('打开失败,请确认是否安装相应程序');
});
} else {
plus.nativeUI.closeWaiting();
alert("下载失败");
}
});
dtask.setRequestHeader('Content-Type', 'application/json'); // 设置POST请求提交的数据类型为JSON字符串
dtask.start();
}
}, function() {
let w = plus.nativeUI.showWaiting("下载中...");
let dtask = plus.downloader.createDownload(config.url+"/b/doc/getFileDownload?docNo=" + docNo + "&docBizNo=" + docBizNo, {
method: "GET",
filename:FileSystemURL //利用保存路径,实现下载文件的重命名
}, function(d, status) {
// 下载完成
if(status == 200) {
plus.nativeUI.closeWaiting();
plus.runtime.openFile(d.filename, {}, function(e) { //调用第三方应用打开文件
alert(d.filename)
alert('打开失败,请确认是否安装相应程序');
});
} else {
plus.nativeUI.closeWaiting();
alert("下载失败");
}
});
dtask.setRequestHeader('Content-Type', 'application/json'); // 设置POST请求提交的数据类型为JSON字符串
dtask.addEventListener('statechanged', (task) => {
if (!dtask) { return; }
switch (task.state) {
case 1:
w.setTitle("开始下载...")
console.log('开始下载');
break;
case 2:
w.setTitle("链接到服务器...")
console.log('链接到服务器...');
break;
case 3:
var progressVal = 0;
progressVal = Math.ceil(task.downloadedSize / task.totalSize * 100);
w.setTitle("下载文件中...("+progressVal+"%)")
break;
case 4:
console.log('监听下载完成');
w.setTitle("监听下载完成...")
break;
}
});
dtask.start();
});
},
}
2.调用方法
if (window.plus) {
fileApi._downFile(item)
}
3.后端下载方法
public ResponseEntity<byte[]> getFileDownload(String docNo, String docBizNo) {
ResultBean<Map<String,Object>> resultBean=new ResultBean<Map<String,Object>>();
ResponseEntity<byte[]> entity = null;
try {
entity = docFeign.getFileDownload(docNo, docBizNo);
} catch (Exception e) {
logger.error("获取文件出错", e);
}
return entity;
}