1. 程式人生 > >檔案下載輸出流

檔案下載輸出流

public class FileDownLoadUtil {

public static Log log = LogFactory.getLog(FileDownLoadUtil .class);

public static void download(String filePath, HttpServletResponse response, String attachmentName) throws Exception {
// 判斷檔案是否存在 
        File file = new File(filePath); 
        log.info("下載檔案路勁:" + filePath);
        if (!file.exists() || file.isDirectory()){ 
        log.info("檔案不存在");
            return; 
        } 
        log.info("檔案存在");
        response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(attachmentName, "UTF-8")); 
        InputStream in = null; 
        BufferedInputStream bis = null; 
        OutputStream out = null; 
        BufferedOutputStream bos = null; 
        
        try { 
            in = new FileInputStream(filePath); 
            bis = new BufferedInputStream(in); 

            byte[] data = new byte[1024]; 
            int bytes = 0; 
            out = response.getOutputStream(); 
            bos = new BufferedOutputStream(out); 
            while ((bytes = bis.read(data, 0, data.length)) != -1) { 
            bos.write(data, 0, bytes); 
            } 
            
            bos.flush(); 
            } catch (Exception e) { 
            log.error("請求失敗" + e.getMessage(), e);
                throw new Exception("請求失敗");
                
            } finally { 
            try { 
            if (bos != null) 
            bos.close(); 
            if (out != null) 
            out.close(); 
            if (bis != null) 
            bis.close(); 
            if (in != null) 
            in.close(); 
            } catch (IOException e) { 
            e.printStackTrace(); 
            } 
            } 
        
}
}