1. 程式人生 > >Java Controller層下載指定Excel模板

Java Controller層下載指定Excel模板

     /**
      * 下載模板
      * @param request
      * @param response
      */
    @RequestMapping(value="template")
    public void template(HttpServletRequest request,HttpServletResponse response ){
        try {

            //指定需要下載的檔案路徑
            String downLoadPath ="E:"+File.separator+"upload"+File.separator+"template"+File.separator+"file_template.xlsx";
            String fileName=downLoadPath.substring(downLoadPath.lastIndexOf("/")+1);
            byte[] buffer=null;  
            buffer = downFileByte(downLoadPath) ; 
            String fileSuffixName=   fileName.substring(fileName.lastIndexOf(".")+1);
            response.reset(); //清除快取
            response.setContentType("application/" +fileSuffixName + ";" +"charset = UTF-8"); //設定字符集和檔案字尾名
       
            String name="歷史專案模板";
            name = new String(name.getBytes(), "ISO-8859-1");
            response.setHeader("Content-Disposition","attachment; filename=" +name+"."+fileSuffixName); // 設定檔名稱
            OutputStream toClient = new BufferedOutputStream(response.getOutputStream());  
            toClient.write(buffer);  
            toClient.flush();  
            toClient.close();
        } catch (Exception e) {
            e.printStackTrace();
            Log4jUtil.getLog4jUtil().error("下載模板"+e.getMessage());
        }
    }

    /** 
     * 下載檔案 
     * 返回byte[] 
     * @param fileName 需要下載的檔名 
     * @return 
     * @throws Exception 
     */  
    public static byte[] downFileByte(String downLoadPath) throws Exception{  
        byte[] return_arraybyte=null;  
        InputStream ins=new FileInputStream(downLoadPath );  
        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();  
        byte[] buf = new byte[1024];  
        int bufsize = 0;  
        while ((bufsize = ins.read(buf, 0, buf.length)) != -1) {  
            byteOut.write(buf, 0, bufsize);  
        }  
        return_arraybyte = byteOut.toByteArray();  
        byteOut.close();  
        ins.close();  
    return return_arraybyte;  
    }

注意:1.返回值一定要是void;2.如果下載檔名稱中文亂碼了,建議用時間戳命名.