废话不多说,直接上代码
package servlets;
import utils.FileDownloadUtil;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class FileDownloadServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/plain;charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
request.setCharacterEncoding("utf-8");
String filename = request.getParameter("filename");
String savename = request.getParameter("savename");
FileDownloadUtil fileDownloadUtil =new FileDownloadUtil();
fileDownloadUtil.downloadFile(response,savename,filename);
}
}
public static void downloadFile(HttpServletResponse response, String saveName, String showFileName) {
BufferedInputStream bis = null;
InputStream is = null;
OutputStream os = null;
BufferedOutputStream bos = null;
try {
String path = "D:\\source\\file\\" + saveName;
File file=new File(path); //:文件的声明
String fileName=file.getName();
is = new FileInputStream(file); //:文件流的声明
os = response.getOutputStream();
bis = new BufferedInputStream(is);
bos = new BufferedOutputStream(os);
fileName = java.net.URLEncoder.encode(showFileName, "UTF-8");// 处理中文文件名的问题
fileName = new String(fileName.getBytes("UTF-8"), "GBK");// 处理中文文件名的问题
fileName= fileName.replaceAll("\\+","%20"); //处理空格转为加号的问题
response.reset();
response.setCharacterEncoding("UTF-8");
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename="+fileName);
int bytesRead = 0;
byte[] buffer = new byte[1024];
while ((bytesRead = bis.read(buffer)) != -1){
bos.write(buffer, 0, bytesRead);
}
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException(ex.getMessage());
} finally {
try {
if (null != bis) {
bis.close();
bis = null;
}
if (null != bos) {
bos.close();
bos = null;
}
if (null != is) {
is.close();
is = null;
}
if (null != os) {
os.close();
os = null;
}
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException(ex.getMessage());
}
}
}
function getSignFileTable(params) {
layui.use(['table', 'laypage'], function () {
//生成表格
var table = layui.table;
table.render({
elem: '#sign_file_table'
, type: "post"
, where: params
, url: "GetSignTableInfoServlet"
, parseData: function (res) {
var data = JSON.parse(res.data);
return {
"code": res.code,
"msg": res.msg,
"count": data.all,
"data": data.beanList
}
}
, cols: [[{
field: 'id',
title: '序号',
type: 'numbers'
}, {
field: 'fileName',
title: '文件名称'
}, {
field: 'saveName',
title: '文件名称',
hide: true
}, {
fixed: 'right',
title: '操作',
toolbar: '#barDemo'
}]]
// , page: true
, even: true
});
//监听工具条
table.on('tool(sign_file_table)', function (obj) {
var data = obj.data;
var layEvent = obj.event;
if (layEvent === 'download') {
window.location.href = "/FileDownloadServlet?filename=" + data.fileName + "&savename=" + data.saveName;
/*$.ajax({
url: "FileDownloadServlet",
type: 'get',
data: {
"filename": data.fileName,
"savename": data.saveName
},
});*/
} else if (layEvent === 'delete') {
$.ajax({
url: "DeleteSignFileServlet",
type: 'POST',
data: {
// "filename": data.fileName,
"savename": data.saveName
},
});
table.render({
elem: '#sign_file_table'
, type: "post"
, where: params
, url: "GetSignTableInfoServlet"
, parseData: function (res) {
var data = JSON.parse(res.data);
return {
"code": res.code,
"msg": res.msg,
"count": data.all,
"data": data.beanList
}
}
, cols: [[{
field: 'id',
title: '序号',
type: 'numbers'
}, {
field: 'fileName',
title: '文件名称'
}, {
field: 'saveName',
title: '文件名称',
hide: true
}, {
fixed: 'right',
title: '操作',
toolbar: '#barDemo'
}]]
// , page: true
, even: true
});
}
});
});
}
JS代码仅作参考