通过a标签传参,timeName为时间戳文件的名字,original为文件原始名字,代码如下:
<a href="${sessionScope.contextPath}/cxgj/downloadfile?timeName=${fj.sjcName}&originalName=${fj.cxgjFj}"> ${fj.cxgjFj} </a>
后台接收:
@RequestMapping(value = "/downloadfile", method = RequestMethod.GET)
public ModelAndView downloadfile( HttpServletResponse response, String timeName, String originalName) {
ModelAndView mav = new ModelAndView("jsonView");
try {
if (timeName != null) {
String fileName = new String(originalName.getBytes("ISO-8859-1"), "utf-8");
//String type = originalName.substring(originalName.lastIndexOf("."));//文件后缀名
//设置文件MIME类型
response.setContentType(ContextLoader.getCurrentWebApplicationContext().getServletContext().getMimeType(timeName));
//设置Content-Disposition
//response.setHeader("Content-Disposition", "attachment;filename=" + new String(matUrl.getBytes("gb2312"), "ISO8859-1"));
response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes(), "ISO8859-1"));
//读取目标文件,通过response将目标文件写到客户端
//获取目标文件的绝对路径
String fullFileName = ContextLoader.getCurrentWebApplicationContext().getServletContext().getRealPath("") + "\\" + "upload" + "\\" + timeName;
/*判断绝对路径下的时间戳文件是否存在*/
File file = new File(fullFileName);
if(!file.exists()){
throw new Exception("源文件不存在!");
}else {
//读取文件
InputStream in = new FileInputStream(fullFileName);
OutputStream out = response.getOutputStream();
//写文件
int b;
byte[] buffer = new byte[1024];
while ((b = in.read(buffer)) != -1) {
out.write(buffer);
}
out.close();
in.close();
}
}
} catch (Exception e) {
LOG.error("下载失败",e);
e.printStackTrace();
}
return mav;
}