最近项目用到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;
}
}