学习用Servlet来实现文件下载

小知识点:

	文件下载是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("文件不存在!");
		}
	}
}

执行结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值