比較通用的文件下載方法

代碼如下,供參考:

**最下面這兩句代碼,是將提示信息寫到一個新頁面**
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("文件不存在,請聯繫管理員!"); //手動拋出一個異常

        }       
    }

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