<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    學(xué)習(xí) 學(xué)習(xí) 再學(xué)習(xí)

    學(xué)習(xí)才是唯一的出路

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      31 隨筆 :: 1 文章 :: 8 評論 :: 0 Trackbacks

    JSP文件下載類整理完成。可以在JSP頁面中實現(xiàn)簡單的下載,支持文件打包下載功能。支持將字符串或者流生成文件提供下載的功能。但是也有一些缺點(diǎn)。現(xiàn)把這個類的基本介紹總結(jié)如下。

    名稱:jsp頁面下載類

    特點(diǎn)及功能介紹

    1. 支持單文件下載。支持多文件zip壓縮下載。多文件zip壓縮可在服務(wù)器保留或者刪除副本。支持將特定的字符串或者byte數(shù)組以指定的文件名提供下載。
    2. 在下載過程中需要提供response對象。并且選擇下載形式。
    3. 下載處理前先進(jìn)行check,避免出現(xiàn)錯誤。
    4. 下載處理過程中出錯時,會報告錯誤信息。
    5. 日文系統(tǒng)下文件名是中文時出現(xiàn)亂碼問題。
    6. 處理前需要進(jìn)行相對繁瑣的設(shè)定。

    現(xiàn)介紹下使用者可見的方法的功能。

    設(shè)定實現(xiàn)下載必須的response對象。
    public void setResponse(HttpServletResponse response)

    設(shè)定下載方式:0 為普通單文件下載。 1 為多文件壓縮成zip包下載。 2 為將指定的字符串等拼接成文件內(nèi)容提供給用戶下載。
    public void setDownType(int fileType)

    設(shè)定下載時顯示給用的文件名。
    public void setDisFileName(String fileName)
       

    壓縮文件下載時,設(shè)定壓縮文件暫時保存的路徑(路徑為絕對路徑)
    public void setZipFilePath( String path )
       

    壓縮文件下載時,設(shè)定服務(wù)器端生成的壓縮文件是否刪除。True 刪除;false 保留。
    public void setZipDelFlag(boolean b)
       
    壓縮文件下載時,設(shè)定要壓縮的文件的文件路徑(路徑為絕對路徑)
    public void setZipFileNames(String[] fileNames)

    單文件下載時,設(shè)定下載文件的路徑(絕對路徑)
    public void setDownFileName(String fileName)
       

    將字符串生成文件內(nèi)容模擬下載時,設(shè)定文件的內(nèi)容。參數(shù)為字符串(可多次調(diào)用)
    public int setFileContent(String fileContent)

    將字符串生成文件內(nèi)容模擬下載時,設(shè)定文件的內(nèi)容。參數(shù)為byte數(shù)組(可多次調(diào)用)
    返回值:0 操作正常; 9 出現(xiàn)IO異常。
    public int setFileContent(byte[] fileContent)
       
    將字符串生成文件內(nèi)容模擬下載時,調(diào)用此方法結(jié)束文件內(nèi)容設(shè)定。
    返回值:0 操作正常; 9 出現(xiàn)IO異常。
    public int setFileContentEnd()
       
    主處理函數(shù)。
    返回值:    0   處理正常;1  未設(shè)定response對象。 2  未設(shè)定文件下載方式。  3   未設(shè)定要顯示的文件名。  4  未設(shè)定要下載的文件路徑,或者設(shè)定的下載的文件路徑不存在。  9  IO異常。
    public int process()

    現(xiàn)在介紹不同下載模式下的簡單流程:

    單文件下載流程

    //實例初始化
    JspFileDownload jfd = new JspFileDownload();
    //設(shè)定response對象   
    jfd.setResponse(response);
    //設(shè)定文件下載模式 0 單文件下載。
    jfd.setDownType(0);
    //設(shè)定顯示的文件名 xxxx.xxx
    jfd.setDisFileName(filename);
    //設(shè)定要下載的文件的路徑,絕對路徑
    jfd.setDownFileName(filePath);
    //主處理函數(shù)。注意處理返回值。
    int result = jfd.process();

    多文件壓縮成ZIP文件下載

    //實例初始化
    JspFileDownload jfd = new JspFileDownload();
    //設(shè)定response對象。
    jfd.setResponse(response);
    //設(shè)定下載模式 1 多文件壓縮成ZIP文件下載。
    jfd.setDownType(1);
    //設(shè)定顯示的文件名
    jfd.setDisFileName(filename);
    //設(shè)定要下載的文件的路徑(數(shù)組,絕對路徑)
    jfd.setZipFileNames(fileNames);
    //設(shè)定服務(wù)器端生成的zip文件是否保留。 true 刪除  false 保留,默認(rèn)為false
    jfd.setZipDelFlag(true);
    //設(shè)定zip文件暫時保存的路徑 (是文件夾)
    jfd.setZipFilePath(zipfolder);
    //主處理函數(shù) 注意返回值
    Int result = jfd.process();

    將字符串生成為文件內(nèi)容,模擬文件下載

    //實例初始化
    JspFileDownload jfd = new JspFileDownload();
    //設(shè)定response對象。
    jfd.setResponse(response);
    //設(shè)定下載模式 2 將字符串作為文件內(nèi)容,實現(xiàn)文件下載。
    jfd.setDownType(2);
    //設(shè)定文件顯示的名稱。
    jfd.setDisFileName(request.getParameter("filename"));
    //主處理函數(shù),下載前check,注意返回值
    out.print(jfd.process());
    //設(shè)定要寫入文件的內(nèi)容,參數(shù)可為字符串或者byte數(shù)組。可多次調(diào)用。
    jfd.setFileContent(request.getParameter("name"));
    //文件內(nèi)容設(shè)定完了,調(diào)用函數(shù)。   
    jfd.setFileContentEnd();

    以上就是簡單的使用介紹。下面貼出主處理類的代碼。由于在日文系統(tǒng)下編輯的文件。注釋只能寫英文,英文太差-_-b。多包涵。

    package com.vogoal.util;
    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    import javax.servlet.http.HttpServletResponse;
    /*
    * vogoalAPI 1.0
    * Auther SinNeR@blueidea.com
    * by vogoal.com
    * mail: vogoals@hotmail.com
    */
    /**
    * JSP FILE DOWNLOAD SUPPORT
    *
    * @author SinNeR
    * @version 1.0
    */
    public class JspFileDownload {
        /** request object */
        private HttpServletResponse response = null;
        /** file type: -1 un-setting; 0 normal file; 1 zip file ;2 stream*/
        private int fileType = -1;
       
        /** file name to be displayed */
        private String disFileName = null;
       
        /** zip file path */
        private String zipFilePath = null;
       
        /** file to be zipped */
        private String[] zipFileNames = null;
       
        private boolean zipDelFlag = false;
       
        /** file to be downloaded */
        private String downFileName = null;
       
        /** error code 0 */
        private static final int PROCESS_OK = 0;
       
        /** error code 1 */
        private static final int RESPONSE_IS_NULL = 1;
       
        /** error code 2 */
        private static final int UNSET_DOWNLOADTYPE = 2;
       
        /** error code 3 */
        private static final int UNSET_DIS_FILE_NAME = 3;
       
        /** error code 4 */
        private static final int UNSET_DOWN_FILE_NAME = 4;
       
        /** error code 9 */
        private static final int IO_EXCEPTION = 9;
       
        /**
         * set response object
         * @param response response Object
         */
        public void setResponse(HttpServletResponse response){
            this.response = response;
        }
       
        /**
         * set file type 0 normal file; 1 zip file ;2 stream
         * @param fileType
         */
        public void setDownType(int fileType){
            this.fileType = fileType;
        }
       
        /**
         * set display file name
         * @param fileName
         */
        public void setDisFileName(String fileName){
            this.disFileName = fileName;
        }
       
        /**
         * set zip file path
         * @param fileNames
         */
        public void setZipFilePath( String path ){
            this.zipFilePath = path;
        }
       
        public void setZipDelFlag(boolean b){
            this.zipDelFlag = b;
        }
       
        /**
         * set zip file names
         * @param fileNames
         */
        public void setZipFileNames(String[] fileNames){
            this.zipFileNames = fileNames;
        }
       
        /**
         * set download file name
         * @param fileName
         */
        public void setDownFileName(String fileName){
            this.downFileName = fileName;
        }
       
        /**
         * set file content
         * @param fileContent
         */
        public int setFileContent(String fileContent){   
            try{   
                byte[] buffs = fileContent.getBytes("UTF-8");
                response.getOutputStream().write(buffs);
            }catch(IOException e){
                return IO_EXCEPTION;
            }
            return PROCESS_OK;
        }
       
        /**
         * set file content
         * @param fileContent
         */
        public int setFileContent(byte[] fileContent){
            try{
                response.getOutputStream().write(fileContent);
            }catch(IOException e){
                return IO_EXCEPTION;
            }
            return PROCESS_OK;
        }
       
        /**
         * set file content end
         *
         */
        public int setFileContentEnd(){
            try{
                response.getOutputStream().close();
            }catch(IOException e){
                return IO_EXCEPTION;
            }
            return PROCESS_OK;
        }
       
        /**
         * main process
         * @return
         */
        public int process(){
            int status = PROCESS_OK;
           
            status = preCheck();
            if ( status != PROCESS_OK )
                return status;
               
            String fileName = disFileName;
           
            response.setContentType("APPLICATION/OCTET-STREAM");  
            response.setHeader("Content-Disposition","attachment;filename=\"" + fileName + "\"");
            int BUFSIZE = 1024 * 8;       
            int rtnPos = 0;
            byte[] buffs = new byte[ BUFSIZE ];
            FileInputStream inStream = null;
            ZipOutputStream zos = null;
            InputStream is = null;
            String filepath = null;
            try{
             
                if ( fileType == 0 || fileType == 1){
                    if ( fileType == 0 ){
                        filepath = downFileName;  
                    }else{
                        filepath = zipFilePath + fileName;
                        String[] fileToZip = zipFileNames;
                                       
                        zos=new ZipOutputStream(new FileOutputStream(filepath));
                        ZipEntry ze=null;
                        byte[] buf=new byte[BUFSIZE];
                        int readLen=0;
                        for (int i= 0;i<fileToZip.length;i++){
                            File f= new File(fileToZip[i]);
           
                            ze=new ZipEntry(f.getName());
                            ze.setSize(f.length());
                            ze.setTime(f.lastModified());
           
                            zos.putNextEntry(ze);
                            is=new BufferedInputStream(new FileInputStream(f));
                            while ((readLen=is.read(buf, 0, BUFSIZE))!=-1) {
                                zos.write(buf, 0, readLen);
                            }
                            is.close();
                        }
                        zos.close();
                    }
              
                    inStream =new FileInputStream(filepath);  
      
                    while((rtnPos=inStream.read(buffs)) >0)  
                        response.getOutputStream().write(buffs,0,rtnPos);  
                    response.getOutputStream().close();  
                    inStream.close();
                }
                if ( zipDelFlag ){
                    File fToDel = new File(filepath);
                    fToDel.delete();
                }
            }catch(IOException e){
                return IO_EXCEPTION;
            }finally{
                try{
                    if ( inStream != null ){
                        inStream.close();
                        inStream = null;
                    }
                    if ( zos != null ){
                        zos.close();
                        zos = null;
                    }
                    if ( is != null ){
                        is.close();
                        is = null;
                    }
                }catch (IOException e){
                }
            }
            return status;
        }
       
        /**
         * pre check.
         * @return
         */
        private int preCheck(){
           
            if ( response == null )
                return RESPONSE_IS_NULL;
               
            if ( disFileName == null || disFileName.trim().length() == 0 )
                return UNSET_DIS_FILE_NAME;
            if ( fileType == -1 )
                return UNSET_DOWNLOADTYPE;
            else if ( fileType == 0 ){
                if ( downFileName == null || downFileName.trim().length() == 0 )
                    return UNSET_DOWN_FILE_NAME;
                else{
                    if ( !isFile( downFileName ) )
                        return UNSET_DOWN_FILE_NAME;
                }
               
            }else if ( fileType == 1 ){
                if ( zipFilePath == null || zipFilePath.length() == 0 )
                    return UNSET_DOWN_FILE_NAME;
                else{
                    if ( !isDirect(zipFilePath) )
                        return UNSET_DOWN_FILE_NAME;
                }
                if ( zipFileNames == null || zipFileNames.length == 0 )
                    return UNSET_DOWN_FILE_NAME;
                else{
                    for ( int i=0;i<zipFileNames.length;i++ ){
                        if ( zipFileNames[i] == null || zipFileNames[i].trim().length() == 0 )
                            return UNSET_DOWN_FILE_NAME;
                        else{
                            if ( !isFile( zipFileNames[i] ) )
                                return UNSET_DOWN_FILE_NAME;
                        }
                    }
                }
            }else if ( fileType == 2 ){
                //doing nothing
            }else{
                return UNSET_DOWNLOADTYPE;
            }
            return PROCESS_OK;
        }
       
        private boolean isFile(String fileName){
            File f = new File(fileName);
            if (!f.exists() || !f.isFile())
                return false;
            return true;
        }
       
        private boolean isDirect(String filePath){
            File f = new File(filePath);
            if (!f.exists() || !f.isDirectory())
                return false;
            return true;
        }
    }

    至此,jsp頁面文件下載介紹完成。
    使用的時候,把這個類生成的class文件拷貝到WEB-INF/classes下。(注意保持包的路徑)

    然后在使用的頁面import進(jìn)這個class即可。
    <%@ page contentType="text/html;charset=GBK"%>

    注意
    可能存在編碼方式的問題,如果出現(xiàn)或者有別的bug請聯(lián)系我,我來debug。

    附件為這個類的source以及測試程序。

    附件說明

    1. 單文件下載測試程序
      請求頁面:downloadSimpleFile.html 
      下載功能實現(xiàn)頁面:downloadSimpleFile.jsp
    2. 多文件壓縮成zip文件下載的測試程序
      請求頁面:downloadZipFile.html 
      下載功能實現(xiàn)頁面:downloadZipFile.jsp
    3. 字符串生成文件內(nèi)容模擬文件下載的測試程序。
      請求頁面:downloadStreamFile.html
      下載功能實現(xiàn)頁面:downloadStreamFile.jsp
    4. Source及class文件。
      Source WEB-INF/src/com/vogoal/util/ JspFileDownload.java
      Class文件WEB-INF/classes/com/vogoal/util/ JspFileDownload.class

    下載:jspDownloadClass.zip



    J-CN工作室
    www.j-cn.org
    posted on 2009-09-22 08:34 鐵猴 閱讀(777) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 激情综合色五月丁香六月亚洲| 亚洲精品国产成人专区| 51午夜精品免费视频| 亚洲AV无码一区二区二三区软件 | 国产精品永久免费10000| 国产亚洲精品成人AA片| 亚洲国产精品13p| 一级毛片在线观看免费| 怡红院亚洲红怡院在线观看| 国产精品亚洲A∨天堂不卡| 成年女人毛片免费播放视频m| 一个人看的hd免费视频| 亚洲性色成人av天堂| 亚洲高清偷拍一区二区三区| 五月婷婷在线免费观看| 未满十八私人高清免费影院| 亚洲国产亚洲片在线观看播放| 亚洲国产精品综合久久一线| **毛片免费观看久久精品| 日韩在线视频播放免费视频完整版| 久久久久久亚洲精品成人| 国产免费观看黄AV片| 久久久久久毛片免费播放| 黄页网址大全免费观看12网站| 2022年亚洲午夜一区二区福利| 亚洲AV中文无码乱人伦在线视色| 2019中文字幕在线电影免费 | 亚洲人成在线播放网站| 麻豆国产VA免费精品高清在线| 久操视频在线免费观看| 男人扒开添女人下部免费视频| 亚洲一级视频在线观看| 亚洲gv猛男gv无码男同短文| 免费一级一片一毛片| 永久免费AV无码网站在线观看| 久久大香香蕉国产免费网站| 国产99视频精品免费视频76| 大桥未久亚洲无av码在线| 亚洲国产成人久久三区| 久久久久亚洲av无码专区| 亚洲精品国产精品乱码在线观看|