使用HttpServletResponse实现下载功能
Posted 拾光者2013
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用HttpServletResponse实现下载功能相关的知识,希望对你有一定的参考价值。
下载功能也可以在js中进行实现,但是这种做法会将文件地址暴露在外面,不安全。
我们一般推荐使用后台的方法实现下载。项目中使用spring-mvc架构,这种架构下controller即为servlet的一种,使用HttpServletResponse即可像servlet一样设置response头信息,实现下载功能。
一、使用HttpServletResponse实现下载功能
- 获取要下载的文件的绝对路径
- 获取要下载的文件名
- 设置content-disposition响应头控制浏览器以下载的形式打开文件
- 获取要下载的文件输入流
- 创建数据缓冲区
- 通过response对象获取outputstream流
- 将FileInputStream流写入buffer缓冲区
- 使用outputstream将缓冲区的数据输出到客户端浏览器
二、使用HttpServletResponse实现下载功能的注意事项
- 编写文件下载功能时推荐使用outputstream流,避免使用PrintWriter流,因为OutputStream流是字节流,可以处理任意类型的数据,而PrintWriter流是字符流,只能处理字符数据,如果用字符流处理字节数据,会导致数据丢失。
-
下载中文文件时,,需要注意的地方就是中文文件名要使用URLEncoder.encode方法进行编码(URLEncoder.encode(fileName, "字符编码")),否则会出现文件名乱码。
response.setHeader("content-disposition","attachment;filename="+URLEncoder.encode(fileName,"UTF-8"));
三、HttpServletResponse实现下载的源代码(spring-mvc controller)
1 /** 2 * 根据filePath将服务器上的图片下载到客户端本地 3 */ 4 @RequestMapping("/downloadjpg") 5 public void downloadjpg(@RequestParam(value="fileId")String fileId,HttpServletResponse response){ 6 JcyAppealDatum datum=jcyAppealDatumService.get(fileId); 7 if (datum!=null) { 8 File file= new File(datum.getFilePath()); 9 if (file.exists()) { 10 InputStream iStream=null; 11 try { 12 iStream = new FileInputStream(file); 13 byte[] buffer = new byte[iStream.available()]; 14 iStream.read(buffer); 15 String fileName = datum.getFileName()+".jpg"; 16 response.setContentType("image/jpeg"); // 设置返回内容格式 17 // 设置返回相应的头内容,中文名需转码( 18 String exportName = "attachment;filename=" + new String((fileName).getBytes("gb2312"), "ISO8859-1"); 19 response.setHeader("Content-disposition", exportName); 20 response.getOutputStream().write(buffer); 21 } catch (Exception e) { 22 e.printStackTrace(); 23 }finally { 24 try { 25 iStream.close(); 26 } catch (Exception e2) { 27 e2.printStackTrace(); 28 } 29 } 30 } 31 32 } 33 }
四、几种常见的contentType
序号 |
内容类型 |
文件扩展名 |
描述 |
1 |
application/msword |
doc |
Microsoft Word |
2 |
application/octet-stream bin |
dms lha lzh exe class |
可执行程序 |
3 |
application/pdf |
|
Adobe Acrobat |
4 |
application/postscript |
ai eps ps |
PostScript |
5 |
appication/powerpoint |
ppt |
Microsoft Powerpoint |
6 |
appication/rtf |
rtf |
rtf 格式 |
7 |
appication/x-compress |
z |
unix 压缩文件 |
8 |
application/x-gzip |
gz |
gzip |
9 |
application/x-gtar |
gtar |
tar 文档 (gnu 格式 ) |
10 |
application/x-shockwave-flash |
swf |
MacroMedia Flash |
11 |
application/x-tar |
tar |
tar(4.3BSD) |
12 |
application/zip |
zip |
winzip |
13 |
audio/basic |
au snd |
sun/next 声音文件 |
14 |
audio/mpeg |
mpeg mp2 |
Mpeg 声音文件 |
15 |
audio/x-aiff |
mid midi rmf |
Midi 格式 |
16 |
audio/x-pn-realaudio |
ram ra |
Real Audio 声音 |
17 |
audio/x-pn-realaudio-plugin |
rpm |
Real Audio 插件 |
18 |
audio/x-wav |
wav |
Microsoft Windows 声音 |
19 |
image/cgm |
cgm |
计算机图形元文件 |
20 |
image/gif |
gif |
COMPUSERVE GIF 图像 |
21 |
image/jpeg |
jpeg jpg jpe |
JPEG 图像 |
22 |
image/png |
png |
PNG 图像 |
以上是关于使用HttpServletResponse实现下载功能的主要内容,如果未能解决你的问题,请参考以下文章
HSSFWorkbook + form + HttpServletResponse 实现excel的下载