您当前的位置: 首页 >  Java

杨林伟

暂无认证

  • 4浏览

    0关注

    3337博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

09JavaWeb基础 - Response类案例(下载文件)

杨林伟 发布时间:2019-03-29 15:12:05 ,浏览量:4

Response文件下载

文件下载的实质就是文件拷贝,将文件从服务器端拷贝到浏览器端。所以文件下载需要IO技术将服务器端的文件使用InputStream读取到,在使用 ServletOutputStream写到response缓冲区中。

代码如下: 在这里插入图片描述

上述代码可以将图片从服务器端传输到浏览器,但浏览器直接解析图片显示在页面上,而不是提供下载,我们需要设置两个响应头,告知浏览器文件的类型和文件的打开方式。

1)告知浏览器文件的类型: response.setContentType(文件的MIME类型); 2)告示浏览器文件的打开方式是下载: response.setHeader(“Content- Disposition”,“attachment;filename=文件名称”);

代码如下: 在这里插入图片描述

但是,如果下载中文文件,页面在下载时会出现中文乱码或不能显示文件名的情况, 原因是不同的浏览器默认对下载文件的编码方式不同,ie是UTF-8编码方式,而火狐 浏览器是Base64编码方式。所里这里需要解决浏览器兼容性问题,解决浏览器兼容 性问题的首要任务是要辨别访问者是ie还是火狐(其他),通过Http请求体中的一个属性可以辨别

在这里插入图片描述 在这里插入图片描述 解决乱码方法如下:

if (agent.contains("MSIE")) {
		// IE浏览器
		filename = URLEncoder.encode(filename, "utf-8");
		filename = filename.replace("+", " ");
} else if (agent.contains("Firefox")) {
		// 火狐浏览器
		BASE64Encoder base64Encoder = new BASE64Encoder();
		filename = "=?utf-8?B?"+ base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
} else {
		// 其它浏览器
		filename = URLEncoder.encode(filename, "utf-8");				
}

其中agent就是请求头User-Agent的值

在这里插入图片描述

关注
打赏
1662376985
查看更多评论
立即登录/注册

微信扫码登录

0.1610s