后台版的文件下载。前端,layui,后端,java、spring代码
时间:2019-03-14
本文章向大家介绍后台版的文件下载。前端,layui,后端,java、spring代码,主要包括后台版的文件下载。前端,layui,后端,java、spring代码使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
js代码
{field: 'contractFile', title: '合同文件', width: 120, rowspan: 2, align: 'center', templet: function (d) {
if (d.contractFile.length != 0) {
return '<a class="abc" href="#" lay-event="download">下载文件</a>'
} else {
return '- -'
}
}},
鼠标点击触发事件
else if (obj.event === "download") {
downloadTem(obj.data.contractFile)
调用事件
function downloadTem(pathData) {
var url = window.location.href;
var urlString = url.split("?");
$('#download2').attr("action", "/lease/downloadFile?filePath=" + encodeURI(pathData) + "&" + urlString[1]);
$('#download3').click();
};
前端,采用隐藏域表单的方式。
<form action="" method="post" id="download2" style="display: none;">
<input name="filename" value="" >
<input type="submit" id="download3">
</form>
后台对应的controller,但其实这截代码,有需要修改的地方。
/**
* 文件下载 todo 该功能需要进行修整,比如先进行查询搜索,如果有资源存在直接下载,并且在后面给改成公用的。
* ,没有资源存在就弹窗进行提示。
*
* @param
* @return
* @throws Exception
*/
@PostMapping(value = "/downloadFile")
public void download(@RequestParam(name = "filePath") String filePathParam, @RequestParam(name = "menuCode") String menuCodeParam, HttpServletResponse resp) throws Exception {
//解码操作
String filePath = URLDecoder.decode(filePathParam, "UTF-8");
String[] files = filePath.split("\\\\");
String directorys = files[0];
String fileName = files[1];
DataInputStream in = null;
OutputStream out = null;
resp.reset();
if (fileName != null) {
try {
//获取项目的绝对路径
String path = ClassUtils.getDefaultClassLoader().getResource("").getPath();
String path2 = path.substring(1, path.length());
String[] path3 = path2.split("/");
String resultFileName = path2 + File.separator + "static" + File.separator + directorys + File.separator + fileName;
InputStream inputStreamParam = new FileInputStream(resultFileName);
resultFileName = URLEncoder.encode(resultFileName, "UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setHeader("Content-disposition", "attachment;filename=" + fileName);
resp.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
in = new DataInputStream(inputStreamParam);
out = resp.getOutputStream();
int bytes = 0;
byte[] bufferOut = new byte[1024];
while ((bytes = in.read(bufferOut)) != -1) {
out.write(bufferOut, 0, bytes);
}
} catch (Exception e) {
e.printStackTrace();
logger.error("错误---路径有了,但是硬盘中,没有对应的文件", e.getStackTrace());
resp.reset();//清空输出流
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().print("<script type='text/javascript'>alert('文件不存在');location.href='/lease/list?menuCode=" + menuCodeParam + "'</script>");
resp.getWriter().close();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException ioe) {
ioe.printStackTrace();
logger.error("io错误", ioe.getStackTrace());
}
}
if (out != null) {
try {
out.close();
} catch (IOException ioe2) {
ioe2.printStackTrace();
logger.error("io错误", ioe2.getStackTrace());
}
}
}
} else {
/*这个地方估计不会走,因为前端没有对应空路径的下载链接。*/
resp.reset();
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().print("<script type='text/javascript'>alert('文件不存在');location.href='/lease/list?menuCode=" + menuCodeParam + "'</script>");
resp.getWriter().close();
}
}
逻辑上,应该是点击后,先根据名字查找数据库看有没有存在的值。没有,直接返回,信息。有才进行下载。
所以,js方面应该是触发两次才对。
- 4. 如何为Hive配置OpenLDAP认证
- 3.如何实现OpenLDAP的主主同步
- 2.OpenLDAP集成SSH登录并使用SSSD同步用户
- 1.如何在CentOS6.5安装OpenLDAP并配置客户端
- PHP 面试知识梳理
- 如何修改CM及CDH元数据库配置
- 如何实现CDH元数据库MySQL的高可用
- 如何实现CDH元数据库MySQL的主主互备
- 在Kerberos环境使用Hue通过Oozie执行Sqoop作业报错异常分析
- 如何在Hue中配置已启用SSL的HttpFS服务
- 如何使用Nginx实现CDSW的跨网段访问
- 7.如何在OpenLDAP中实现将一个用户添加到多个组
- 如何使用java代码通过JDBC访问Sentry环境下的Hive
- 如何为HttpFS服务配置SSL
- HTML 教程
- HTML 简介
- html div 标签介绍
- html span 标签介绍
- html a 超链接标签
- HTML Br换行标签介绍
- HTML P段落标签介绍
- HTML br与p标签区别
- Html H 标题标签
- html px em pt长度单位
- HTML form 标签
- HTML radio 单选框
- HTML B 加粗标签
- HTML strong加粗粗体标签
- HTML em 强调标签
- HTML i 斜体标签
- HTML u下划线标签
- HTML s 删除线标签
- Html img 图片标签
- Html上标注sup与下标注sub标签
- HTML nobr 禁止换行标签
- HTML hr 水平线标签
- HTML label 标签
- HTML input 标签
- HTML textarea 标签
- HTML select下拉列表标签
- HTML checkbox 多选框
- HTML font color 标签
- HTML iframe 框架标签
- HTML Table 表格
- HTML dl dt dd 标签
- HTML ol li有序列表标签
- HTML ul li 无序列表标签
- HTML 注释
- CSS 教程
- CSS 简介
- CSS 语法
- CSS Id 和 Class选择器
- CSS 样式的创建
- CSS background 背景介绍
- CSS 文本样式
- CSS font 字体
- CSS A 链接
- CSS ul ol列表样式
- CSS TABLE 样式
- CSS 框模型
- CSS border 边框
- CSS Outlines 轮廓
- CSS 外边距 Margin
- CSS Padding 内边距
- CSS 分组和嵌套选择器
- CSS 尺寸 (Dimension)
- CSS Display 属性
- CSS Position 定位
- CSS Float 浮动
- CSS 水平对齐(Horizontal Align)
- CSS 组合选择符
- CSS 伪类
- CSS 伪元素
- CSS 导航栏
- CSS 下拉菜单
- CSS 图片廊
- CSS 图像透明/不透明
- CSS sprite 图像拼合技术
- CSS 媒体类型
- CSS 属性选择器
- CSS 实例