基于servlet的文件下载

首先把服务器中的/download文件夹中可供下载的资源显示在带有下载链接的JSP页面中,后台servlet代码(该servlet带有转发到一个显示可供下载资源的JSP页面的操作)为:
import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/download")
public class downloadservlet extends HttpServlet {
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
	// TODO Auto-generated method stub
	//reques里也有这个获取到项目名之前的路径方法 但是过时了这样获取 
	String path=getServletContext().getRealPath("/download");//获取到的结果是:D:\JEEeclipsework\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\checkcode\download
 //获取文件夹
	File file=new File(path);
 //
	String []files=file.list();
	arg0.setAttribute("filename", files);
	System.out.println(files.length);
	arg0.getRequestDispatcher("/download.jsp").forward(arg0, arg1);
	
}
}
带有下载链接的JSP页面代码为:
<%
for(String filename:(String[])request.getAttribute("filename")){
 out.println(filename);
 %><a href="do?filename=<%=filename%>">下载</a><br/>
 <% 
}
%>
点击超链接后,发送请求,开始下载的servlet代码:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class dodownload
 */
@WebServlet("/do")
public class dodownload extends HttpServlet {
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
	// TODO Auto-generated method stub

	//获取要下载的文件名
	String filename=arg0.getParameter("filename");
	filename=new String(filename.getBytes("ISO8859-1"),"UTF-8");//因为Tomcat是iso8859-1编码
	System.out.println(filename);
	//获取服务器的download路径
	String basepath=getServletContext().getRealPath("/download");

	//将要下载的文件写入输入流
	FileInputStream fis=new FileInputStream(basepath+"/"+filename);
	//通过response的outputstream向前台用户路径下写入  因为该内置对象是服务器响应客户端
//告诉浏览器以下载的方式打开
	arg1.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(filename,"utf-8"));
OutputStream fos=arg1.getOutputStream();
byte[] buffer=new byte[1024];
int len=0;
while ((len=fis.read(buffer))!=-1) {
	fos.write(buffer,0,len);
}
}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值