比较通用的文件下载方法

代码如下,供参考:

**最下面这两句代码,是将提示信息写到一个新页面**
response.setHeader("Content-type", "text/html;charset=UTF-8"); //头部
response.getOutputStream().write(errorMsg.getBytes("UTF-8")); //将提示信息写入到一个页面
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

/**
 * @author ZhouMengShun
 */
public class DemoController {

    /** 
    * 文件下载 
    * @param request 
    * @param response 
    * @param filePath 文件路径 
    */ 
    public void downloadFile(String filePath,HttpServletResponse response) throws Exception { 

        File file = new File(filePath);//创建下载的文件对象

        if (file.exists()) {//判断文件是否存在
            response.reset(); 
            response.setContentType("application/x-msdownload"); 

            //得到文件名称
            String fileDownName=new String(file.getName().getBytes("gbk"),"iso8859-1"); 

            response.addHeader("Content-Disposition","attachment; filename=\""+fileDownName+"\""); 
            int fileLength = (int) file.length(); 
            response.setContentLength(fileLength); 

            if (fileLength != 0) {//判断文件长度大于0

                InputStream inStream = new FileInputStream(file);//创建输入流
                byte[] buf = new byte[4096]; 

                ServletOutputStream servletOS = response.getOutputStream();//创建输出流
                int readLength; 
                while (((readLength = inStream.read(buf)) != -1)) { 
                    servletOS.write(buf, 0, readLength); //写
                } 
                servletOS.flush(); 
                inStream.close(); 
                servletOS.close(); 
            } 

        } else { //文件不存在

            String errorMsg = "文件不存在,请联系管理员!"; 

            response.setHeader("Content-type", "text/html;charset=UTF-8"); 
            response.getOutputStream().write(errorMsg.getBytes("UTF-8")); //将提示信息写入到一个页面

            //throw new Exception("文件不存在,请联系管理员!"); //手动抛出一个异常

        }       
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章