小知识点:
文件下载是Web应用程序经常提供的功能。对于静态资源,如图像或者Word文档,可以在页面中使用一个指向资源URL实现下载,只要资源在Web程序的目录中即可(但不能在WEB-INF目录中)
一、在WebContent中创建一个jsp页面
该页面用于提供一个文件下载链接,单击该链接即可下载文件
关键代码如下:
<p align="center"><font color="#000080" size="5">点下方链接下载周董新歌</font></p>
<a href="file-download.ch">Mojito</a>
二、新建一个Servlet类实现下载功能
(1)将响应对象的内容设置为文件的内容类型,使用响应对象的setContentType()方法设置资源文件的内容类型。如果不能确定文件类型,或者希望浏览器总是打开文件下载的对话框,可以将内容设置为application/octet-stream。
(2)添加一个名为Content-Disposition的响应头,其值为attachment;filename=fileName
代码如下:
package com.demo;
import java.io.*;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet(urlPatterns= {"/file-download.ch"})
public class FileDownloadServlet extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
File file=new File("D:\\Mojito\\周杰伦 - Mojito.mp3");
if(file.exists()) {
//设置相应的内容相应类型为MP3
response.setContentType("audio/mp3");
response.addHeader("Content-Disposition", "attachment;filename=周杰伦 - Mojito.mp3");
byte[] buffer=new byte[1024];
FileInputStream fis=null;
BufferedInputStream bis=null;
try {
fis=new FileInputStream(file);
bis=new BufferedInputStream(fis);
OutputStream os=response.getOutputStream();
int i=bis.read(buffer);
while(i!=-1) {
os.write(buffer,0,i);
i=bis.read(buffer);
}
}catch(IOException ex) {
System.out.println(ex.toString());
}finally {
if(bis!=null) {
bis.close();
}
if(fis!=null) {
fis.close();
}
}
}else {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out=response.getWriter();
out.println("文件不存在!");
}
}
}
执行结果如下: