您的位置:首页 > 其它

Servlet 实现下载功能

2015-12-24 17:37 381 查看
转载自:http://blog.csdn.net/huazhizui/article/details/7401323

一个使用Servlet文件实现文件下载的实例(可以扩充本实例实现:对用户隐藏他要下载文件的路径,或者在下载文件时要做一些其他的工作,如检查用户有没有下载此文件的权限等)了解在Servlet中如何控制输出流以及response对象的contentType相关知识一个Servlet文件DownloadFile,在此Servlet中读取要下载的文件,然后写到响应流中以达到用户下载文件的目的。要下载的文件可以放在任何地方,并且是对用户隐藏的。在DownloadFile
Servlet中,首先要得到要下载文件的文件名filename,同时要预先定义好文件保存的路径,然后设置response对象的内容类型和头信息,最后读取要下载文件的字节流并写到response的输出流中。




[java] view
plaincopy

  

[java] view
plaincopy

package myservlet;  

  

  

import java.io.*;  

  

import javax.servlet.*;  

  

import javax.servlet.http.*;  

  

  

  

public class DownloadFile extends HttpServlet {  

  

 //字符编码  

  

 private final String ENCODING="GB2312";  

  

  

 //内容类型  

  

 private final String CONTENT_TYPE="text/html;charset=gb2312";  

  

  

 //要下载的文件存放的路径  

  

 private String downloadfiledir="d:\\temp\\";  

  

  

  

 public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{  

  

 //设置request对象的字符编码  

  

 request.setCharacterEncoding(ENCODING);  

  

  

 //从request中取出要下载文件的名字  

  

 String filename=request.getParameter("filename");  

  

 if(filename==null||filename.trim().equals("")){  

  

 //设置response对象的ContentType  

  

 response.setContentType(CONTENT_TYPE);  

  

  

 //输出错误信息  

  

 PrintWriter out=response.getWriter();  

  

 out.println("<font color=red>输入的文件名无效!</font>");  

  

 out.close();  

  

 }else{  

  

 //下载文件的完整路径名  

  

 String fullfilename=downloadfiledir+filename;  

  

 System.out.println("下载文件:"+fullfilename);  

  

  

 //根据文件的类型设置response对象的ContentType  

  

 String contentType=getServletContext().getMimeType(fullfilename);  

  

 if(contentType==null)  

  

 contentType="application/octet-stream";  

  

 response.setContentType(contentType);  

  

  

 //设置response的头信息  

  

 response.setHeader("Content-disposition","attachment;filename=\""+filename+"\"");  

  

 InputStream is=null;  

  

 OutputStream os=null;  

  

  

 try{  

  

 is=new BufferedInputStream(new FileInputStream(fullfilename));  

  

  

 //定义输出字节流  

  

 ByteArrayOutputStream baos=new ByteArrayOutputStream();  

  

  

 //定义response的输出流  

  

 os=new BufferedOutputStream(response.getOutputStream());  

  

  

 //定义buffer  

  

 byte[] buffer=new byte[4*1024]; //4k Buffer  

  

 int read=0;  

  

  

 //从文件中读入数据并写到输出字节流中  

  

 while((read=is.read(buffer))!=-1){  

  

 baos.write(buffer,0,read);  

  

 }  

  

  

 //将输出字节流写到response的输出流中  

  

 os.write(baos.toByteArray());  

  

 }catch(IOException e){  

  

 e.printStackTrace();  

  

 }finally{  

  

 //关闭输出字节流和response输出流  

  

 os.close();  

  

 is.close();  

  

 }  

  

 }  

  

 }  

  

  

 public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{  

  

 //调用doGet()方法  

  

 doGet(request,response);  

  

 }  

  

}  

别处Copy的  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: