ssm下载文件

Posted xwd2366846227

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();

以上是关于ssm下载文件的主要内容,如果未能解决你的问题,请参考以下文章

ssm框架下的文件上传和文件下载

SSM maven框架下载简易版

ssm在线考试系统设计与实现(论文+程序设计+数据库文件)下载

SSM整合 上传下载之添加商品

导入ssm项目时,项目基本的配置文件

导入ssm项目时,项目基本的配置文件