本文主要介绍SpringMVC框架下实现java代码中下载服务器文档的功能:
前端jsp代码:
<%@ page contentType="text/html;charset=UTF-8" %>
<!-- 是否忽略特殊标签:否 -->
<%@ page isELIgnored="false" %>
<!-- 加载C标签 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<c:set var="ctx" value="${pageContext.request.contextPath}"/>
<body>
<div class="fn-left tips-type">
商户下载
<a class="am-ft-blue" href="javascript:void(0);"onclick="download_file('${ctx}/downLoad/loadDoc?filename=行业成员管理确认书.docx')">《行业成员管理确认书》</a>
,填写结尾处的联系信息并盖公章/合同章、加盖骑缝章,正文内容不得修改。盖章原件须拍摄清晰照片后上传。
</div>
</body>
</html>
JS代码(重新加载框架下载):
//下载管理证书
function download_file(url){
if (typeof (download_file.iframe) == "undefined"){
var iframe = document.createElement("iframe");
download_file.iframe = iframe;
document.body.appendChild(download_file.iframe);
}
download_file.iframe.src = url;
download_file.iframe.style.display = "none";
}
后台代码:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
/**
*
* @Description: 下载文档
* @author: xiangcheng
* @date : 2018年10月19日上午9:21:43
* @version: V2.3
*/
@Controller
@RequestMapping(value = "/downLoad")
public class DownLoadDocController {
private static final Logger logger = LoggerFactory
.getLogger(DownLoadDocController.class);
@RequestMapping(value="/loadDoc",method=RequestMethod.GET)
public void download(@RequestParam(value="filename")String filename,HttpServletRequest request,
HttpServletResponse response) throws IOException {
logger.info("##############开始下载授权证书文件##############"+request.getSession().getServletContext().getRealPath("\\"));
try {
//模拟文件需要下载的文件
String path = request.getSession().getServletContext().getResource("/static/doc/").getFile()+filename;
System.out.println("=============下载路径:"+path);
//获取输入流
InputStream bis = new BufferedInputStream(new FileInputStream(new File(path)));
//转码,避免文件名中文乱码
filename = URLEncoder.encode(filename,"UTF-8");
//设置文件下载头
response.addHeader("Content-Disposition", "attachment;filename=" + filename);
//1.设置文件ContentType类型,这样设置,会自动判断下载文件类型
response.setContentType("multipart/form-data");
BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
int len = 0;
while((len = bis.read()) != -1){
out.write(len);
out.flush();
}
out.close();
bis.close();
logger.info("##############下载授权证书文件成功!!##############");
} catch (Exception e) {
logger.error("文件下载失败!filename:"+filename,e);
}
}
}
说明:如果是Tomcat或者jetty服务,获取文件路径的方法可以是:
String path = request.getSession().getServletContext().getRealPath("/")+filename;
PS:但是如果发布到weblogic打war包后下载就需要用下面这个方法,否则会报FileNotFoundException:异常!!!
String path = request.getSession().getServletContext().getResource("/static/doc/").getFile()+filename;