java ssm下载文件_ssm下载文件

## 前台页面

文件下载只需要在前端页面,(解决了中文文件名不能传输)

跳到对应的controller, 参数跟上文件名fileName

下载

## 后台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();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值