Servle 文件下载

package  com.future.zfs.util;

import  java.io.BufferedInputStream;
import  java.io.BufferedOutputStream;
import  java.io.File;
import  java.io.FileInputStream;
import  java.io.IOException;
import  java.io.InputStream;
import  java.io.OutputStream;

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

@SuppressWarnings(
" serial " )
public   class  FileDownLoadServlet  extends  HttpServlet{
    
    @Override
    
protected   void  service(HttpServletRequest request, HttpServletResponse response)
            
throws  ServletException, IOException {
        String path
= request.getParameter( " filename " );
        path
= new  String(path.getBytes( " ISO-8859-1 " ), " utf-8 " );
        download(path,request,response);
    }
    
    @SuppressWarnings(
" deprecation " )
    
public  HttpServletResponse download(String path,HttpServletRequest request, HttpServletResponse response) {
        
try  {
            
//  path是指欲下载的文件的路径。
            File file  =   new  File(request.getRealPath( " / " ) + " / " + path);
            
//  取得文件名。
            String filename  =  file.getName();
            
//  取得文件的后缀名。
            
// String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();

            
//  以流的形式下载文件。
            InputStream fis  =   new  BufferedInputStream( new  FileInputStream(file));
            
byte [] buffer  =   new   byte [fis.available()];
            fis.read(buffer);
            fis.close();
            
//  清空response
            response.reset();
            
//  设置response的Header
            response.addHeader( " Content-Disposition " " attachment;filename= "   +   new  String(filename.getBytes( " utf-8 " ), " ISO-8859-1 " ));
            response.addHeader(
" Content-Length " ""   +  file.length());
            OutputStream toClient 
=   new  BufferedOutputStream(response.getOutputStream());
            response.setContentType(
" application/octet-stream " );
            toClient.write(buffer);
            toClient.flush();
            toClient.close();
        } 
catch  (IOException ex) {
            ex.printStackTrace();
        }
        
return  response;
    }
}
web.xml
< servlet >
        
< servlet-name > fileDownLoadServlet </ servlet-name >
        
< servlet-class > com.future.zfs.util.FileDownLoadServlet </ servlet-class >
    
</ servlet >
    
< servlet-mapping >
        
< servlet-name > fileDownLoadServlet </ servlet-name >
        
< url-pattern > /fileDownLoadServlet </ url-pattern >
    
</ servlet-mapping >
< href ="fileDownLoadServlet?filename=通讯录.xls" > 哈哈,测试文件下载 </ a >

你可能感兴趣的:(Servle 文件下载)