ssm下载文件

 

## 前台页面

文件下载只需要在前端页面,(解决了中文文件名不能传输)
跳到对应的controller, 参数跟上文件名fileName

<a href="/ssm_kgc/fileDownload?fileName=宏宏.jpg">下载</a>


## 后台java代码

/**
* 文件下载,只需要传入对应文件名字
*/
@RequestMapping("/fileDownload")
public void fileDownload(
@RequestParam(value = "fileName",required = false)String fileName,
HttpServletRequest req,
HttpServletResponse resp,
HttpSession session) throws Exception {

/*******************1.接收请求参数***********************************/
//获取文件名,接收文件名参数

/*******************2.对接收的参数进行编码处理**************************/
/**因为使用的是UTF-8的编码形式,所以不需要进行转码**/
//获取参数 ,默认会对参数进行编码 ISO8859-1
//把乱码转回二进制位
// byte[] bytes = name.getBytes("ISO8859-1");
//再去使用UTF-8进行编码
// name = new String(name.getBytes(),"UTF-8");

/*******************3.告诉浏览器响应的文件的类型*************************/
// 根据文件名来获取mime类型
String mimeType = session.getServletContext().getMimeType(fileName);
// 设置 mimeType
resp.setContentType(mimeType);

/*******************4.告诉浏览器以附件的形式下载*************************/
// 获取客户端信息
String agent = req.getHeader("User-Agent");
// 定义一个变量记录编码之后的名字
String filenameEncoder = "";
if (agent.contains("MSIE")) {
// IE编码
filenameEncoder = URLEncoder.encode(fileName, "utf-8");
filenameEncoder = filenameEncoder.replace("+", " ");
} else if (agent.contains("Firefox")) {
// 火狐编码
BASE64Encoder base64Encoder = new BASE64Encoder();
filenameEncoder = "=?utf-8?B?" + base64Encoder.encode(fileName.getBytes("utf-8")) + "?=";
} else {
// 浏览器编码
filenameEncoder = URLEncoder.encode(fileName, "utf-8");
}
// 告诉浏览器是以附件形式来下载 不要解析
resp.setHeader("Content-Disposition", "attachment;filename=" + filenameEncoder);

/*******************5.输出对应的流*************************/
//获取文件的绝对路径,拼接文件的路径
String path = session.getServletContext().getRealPath("download/" + fileName);

System.out.println("下载文件的路径" + path);
//写入流中
FileInputStream is = new FileInputStream(path);
//获取相应的输出流
ServletOutputStream os = resp.getOutputStream();
byte[] b = new byte[1024];
int len;
//写入浏览器中
while((len = is.read(b)) != -1){
os.write(b, 0, len);
}
//关闭对应的流
os.close();
is.close();
}

posted @ 2019-07-15 11:50  不忆过去,不憧未来!  阅读(836)  评论(0编辑  收藏  举报