开发环境:Springboot + layui
预览插件:pdf.js
只需要下载的话,不需要前端框架和预览插件
HTTP服务搭建:
https://www.cnblogs.com/wuy401120html/p/9219255.html
前端:
, {field: 'file_name', title: '文件名称', width: 480
, templet: function (d) {
if (d.file_name != null && d.file_name != ''){
return '<a href="javascript:void(0);" style="color: #0B9EB0;size: 15px;" lay-event="detail">'+d.file_name+'</a>';
}
}
}
//监听行工具事件
table.on('tool(test)', function (obj) { //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"
var data = obj.data; //获得当前行数据
var layEvent = obj.event; //获得 lay-event 对应的值
if (layEvent === 'detail'){
var file_path = data.path;
var file_name = data.filename;
var filePath = file_path + '/' + file_name;
var format = file_name.substring(file_name.length - 3, file_name.length);
if (format === 'pdf'|| format === 'PDF'){
window.open("/static/js/mes/xxx/web/viewer.html?file=" + encodeURIComponent("/xxx/httpShowFile?filePath="+filePath));
}else {//不是pdf文件就直接弹出下载框
window.open("/xxx/downloadFile?filePath="+filePath+"&fileName="+data.file_name);
}
}
});
后台:
//下载文件
@RequestMapping("/downloadFile")
public void downloadFile(String filePath, String fileName, HttpServletResponse response) throws IOException {
HttpUtil.HttpDownloadFile(filePath, fileName, response);
}
//文件下载
//filePath为服务器中该接口下的地址,格式如:“/作业/2064/文件.png”
public static void HttpDownloadFile(String filePath, String fileName, HttpServletResponse response) throws IOException {
URL url = null;
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");
//设置下载弹框中的文件名,将中文文件名称进行编码
String downloadFileName = URLEncoder.encode(fileName, "UTF-8");
response.addHeader("Content-Disposition","attachment;filename="+ downloadFileName);
//文件地址转码拼接
String urlSuf = URLEncoder.encode(filePath,"UTF-8").replaceAll("%2F","/");
url = new URL("http://192.168.xxx.xxx:xxx" + urlSuf);//与地址、端口拼接
// 连接类的父类,抽象类
URLConnection conn = url.openConnection();
// http的连接类
HttpURLConnection httpURLConnection = (HttpURLConnection) conn;
//设置请求方式,默认是GET
httpURLConnection.setRequestMethod("GET");
// 设置字符编码
httpURLConnection.setRequestProperty("Charset", "UTF-8");
// 打开到此 URL引用的资源的通信链接(如果尚未建立这样的连接)
httpURLConnection.connect();
// 建立链接从请求中获取数据
BufferedInputStream bin = new BufferedInputStream(httpURLConnection.getInputStream());
//弹窗保存路径
OutputStream out = response.getOutputStream();
int size = 0;
long len = 0;
byte[] buf = new byte[2048];
while ((size = bin.read(buf)) != -1){
len += size;
out.write(buf,0,size);
}
//关闭资源
bin.close();
out.close();
}
//文件预览返回文件流
public static void HttpShowFile(String filePath, HttpServletResponse response) throws IOException {
URL url = null;
response.setCharacterEncoding("utf-8");
response.setContentType("application/pdf");
String downloadFileName = filePath.substring(filePath.lastIndexOf('/') + 1);
response.addHeader("Content-Disposition","attachment;filename=" + downloadFileName);
//文件地址转码拼接
String urlSuf = URLEncoder.encode(filePath,"UTF-8").replaceAll("%2F","/");
url = new URL("http://192.168.xxx.xxx:xxx" + urlSuf);
// 连接类的父类,抽象类
URLConnection conn = url.openConnection();
// http的连接类
HttpURLConnection httpURLConnection = (HttpURLConnection) conn;
//设置请求方式,默认是GET
httpURLConnection.setRequestMethod("GET");
// 设置字符编码
httpURLConnection.setRequestProperty("Charset", "UTF-8");
// 打开到此 URL引用的资源的通信链接(如果尚未建立这样的连接)
httpURLConnection.connect();
// 建立链接从请求中获取数据
BufferedInputStream bin = new BufferedInputStream(httpURLConnection.getInputStream());
//弹窗保存路径
OutputStream out = response.getOutputStream();
int size = 0;
long len = 0;
byte[] buf = new byte[2048];
while ((size = bin.read(buf)) != -1){
len += size;
out.write(buf,0,size);
}
//关闭资源
bin.close();
out.close();
}