最近项目用到html页面下载预览本地磁盘的需求,网上搜集了好多,没有具体并且能跑通的程序,这里贴出来跟大家分享
js
1.动态更改href 请求 实现更改文件名称
var url="file/download?filePath="+entName+".pdf"; url=encodeURI(url); url=encodeURI(url); $("#xiazaipdfbtn").attr('href',url);
2.html
<a href="file/download?filePath=dinfo-boc.pdf" class="topalabe" target="_blank" id="xiazaipdfbtn">下载</a>
3.java
package com.ultrapower.zq.iscloud.web.boc.controller.admin; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.context.ServletContextAware; import com.ultrapower.zq.iscloud.web.boc.api.utils.ReadPropertity; import javax.servlet.ServletContext; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; @Controller public class FileController implements ServletContextAware{ //Spring这里是通过实现ServletContextAware接口来注入ServletContext对象 private ServletContext servletContext; @RequestMapping(value = "/views/admin/file/download", method = RequestMethod.GET) public void fileDownload(HttpServletRequest request, HttpServletResponse response){ //获取网站部署路径(通过ServletContext对象),用于确定下载文件位置,从而实现下载 String filePath = request.getParameter("filePath"); // filePath = java.net.URLDecoder.decode(filePath,"UTF-8"); //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型 response.setContentType("multipart/form-data"); //2.设置文件头:最后一个参数是设置下载文件名(假如我们叫a.pdf) response.setHeader("Content-Disposition", "attachment;fileName="+filePath); ServletOutputStream out; //通过文件路径获得File对象(假如此路径中有一个download.pdf文件) File file = new File(ReadPropertity.getProperty("python.path")+"\\DINFO-BOC.pdf"); try { FileInputStream inputStream = new FileInputStream(file); //3.通过response获取ServletOutputStream对象(out) out = response.getOutputStream(); int b = 0; byte[] buffer = new byte[1024]; while ((b=inputStream.read(buffer))!=-1){ //4.写到输出流(out)中 out.write(buffer,0,b); } inputStream.close(); out.close(); out.flush(); } catch (IOException e) { e.printStackTrace(); } } public void setServletContext(ServletContext servletContext) { this.servletContext = servletContext; } }