学习笔记之下载

本文用于记录学习心得和笔记。

下载

下载就是向客户端响应字节数据。

步骤

设置Content-type响应头。可以通过this.getServletContext().getMimeType(String filename)方法来获取指定文件名的Mime类型。
设置Content-Disposition响应头。这个响应头的默认值是inline,即在浏览器窗口中打开。因此需要将其设置为attachment;filename=”文件名”。
创建文件输入流。FileInputStream input = new FileInputStream(File filename)
获取响应流,ServletOutputStream output = response.getOutputStream()
将输入流数据写入到响应流中。IOUtils.copy(input, output)
下载文件名乱码问题:大多数浏览器使用的是URL编码,因此当文件名是中文时会出现乱码,解决方式:name = new String(filenaem.getBytes("gbk"), ISO-8859-1)
完整代码:

1
2
3
4
5
6
7
8
9
10
11
String filename = "F:/music/山田タマル - Scarborough Fair.flac";//得到文件的Mime类型
String contentType = this.getServletContext().getMimeType(filename);//处理文件名乱码问题
String name = new String("斯卡布罗集市.flac".getBytes("gbk"), "ISO-8859-1");
String contentDisposition = "attachment;filename=" + name;
//设置响应头
response.setHeader("Content-Type", contentType);
response.setHeader("Content-Disposition", contentDisposition);
FileInputStream input = new FileInputStream(filename);//输入流
ServletOutputStream output = response.getOutputStream();//输出流
IOUtils.copy(input, output);//将数据从输入流写入到响应流中
input.close();