中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁 > 技術(shù)文檔 > 網(wǎng)絡(luò)編程 > Jsp頁面實(shí)現(xiàn)文件上傳下載
ACCESS的參數(shù)化查詢 回到列表 CSV文件的生成與分析
 Jsp頁面實(shí)現(xiàn)文件上傳下載

作者:SinNeR 時間: 2008-01-03 文檔類型:原創(chuàng) 來自:藍(lán)色理想

第 1 頁 jsp頁面實(shí)現(xiàn)文件上傳
第 2 頁 jsp頁面實(shí)現(xiàn)文件下載

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

名稱:jsp頁面下載類
作者:SinNeR
Mail:vogoals[at]hotmail.com

特點(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è)定實(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)在介紹不同下載模式下的簡單流程:

單文件下載流程

//實(shí)例初始化
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文件下載

//實(shí)例初始化
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)容,模擬文件下載

//實(shí)例初始化
JspFileDownload jfd = new JspFileDownload();
//設(shè)定response對象。
jfd.setResponse(response);
//設(shè)定下載模式 2 將字符串作為文件內(nèi)容,實(shí)現(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 
    下載功能實(shí)現(xiàn)頁面:downloadSimpleFile.jsp
  2. 多文件壓縮成zip文件下載的測試程序
    請求頁面:downloadZipFile.html 
    下載功能實(shí)現(xiàn)頁面:downloadZipFile.jsp
  3. 字符串生成文件內(nèi)容模擬文件下載的測試程序。
    請求頁面:downloadStreamFile.html
    下載功能實(shí)現(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

以上文件為SinNeR勞動成果,歸blueidea所有,轉(zhuǎn)載請注明出處。

經(jīng)典論壇討論
http://bbs.blueidea.com/thread-2732283-1-1.html

本文鏈接:http://www.95time.cn/tech/program/2008/5258.asp 

出處:藍(lán)色理想
責(zé)任編輯:moby

上一頁 jsp頁面實(shí)現(xiàn)文件上傳 下一頁

◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論

相關(guān)文章 更多相關(guān)鏈接
CSV文件的生成與分析
Jsp常用功能——圖片驗(yàn)證碼
ThickBox 3.1 調(diào)用/演示/下載
免費(fèi)下載《Connection》第2期
開源IXNA 聚合程序發(fā)布
作者文章
CSV文件的生成與分析
Jsp常用功能——圖片驗(yàn)證碼
關(guān)鍵字搜索 常規(guī)搜索 推薦文檔
熱門搜索:CSS Fireworks 設(shè)計比賽 網(wǎng)頁制作 web標(biāo)準(zhǔn) 用戶體驗(yàn) UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點(diǎn)最新 站點(diǎn)最新列表
周大!熬•自然”設(shè)計大賽開啟
國際體驗(yàn)設(shè)計大會7月將在京舉行
中國國防科技信息中心標(biāo)志征集
云計算如何讓安全問題可控
云計算是多數(shù)企業(yè)唯一擁抱互聯(lián)網(wǎng)的機(jī)會
阿里行云
云手機(jī)年終巨獻(xiàn),送禮標(biāo)配299起
阿里巴巴CTO王堅(jiān)的"云和互聯(lián)網(wǎng)觀"
1499元買真八核 云OS雙蛋大促
首屆COCO桌面手機(jī)主題設(shè)計大賽
欄目最新 欄目最新列表
淺談JavaScript編程語言的編碼規(guī)范
如何在illustrator中繪制臺歷
Ps簡單繪制一個可愛的鉛筆圖標(biāo)
數(shù)據(jù)同步算法研究
用ps作簡單的作品展示頁面
CSS定位機(jī)制之一:普通流
25個最佳最閃亮的Eclipse開發(fā)項(xiàng)目
Illustrator中制作針線縫制文字效果
Photoshop制作印刷凹凸字體
VS2010中創(chuàng)建自定義SQL Rule
>> 分頁 首頁 前頁 后頁 尾頁 頁次:2/21個記錄/頁 轉(zhuǎn)到 頁 共2個記錄

藍(lán)色理想版權(quán)申明:除部分特別聲明不要轉(zhuǎn)載,或者授權(quán)我站獨(dú)家播發(fā)的文章外,大家可以自由轉(zhuǎn)載我站點(diǎn)的原創(chuàng)文章,但原作者和來自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來自一節(jié),自行鏈接)。文章版權(quán)歸我站和作者共有。

轉(zhuǎn)載要求:轉(zhuǎn)載之圖片、文件,鏈接請不要盜鏈到本站,且不準(zhǔn)打上各自站點(diǎn)的水印,亦不能抹去我站點(diǎn)水印。

特別注意:本站所提供的攝影照片,插畫,設(shè)計作品,如需使用,請與原作者聯(lián)系,版權(quán)歸原作者所有,文章若有侵犯作者版權(quán),請與我們聯(lián)系,我們將立即刪除修改。

您的評論
用戶名:  口令:
說明:輸入正確的用戶名和密碼才能參與評論。如果您不是本站會員,你可以注冊 為本站會員。
注意:文章中的鏈接、內(nèi)容等需要修改的錯誤,請用報告錯誤,以利文檔及時修改。
不評分 1 2 3 4 5
注意:請不要在評論中含與內(nèi)容無關(guān)的廣告鏈接,違者封ID
請您注意:
·不良評論請用報告管理員,以利管理員及時刪除。
·尊重網(wǎng)上道德,遵守中華人民共和國的各項(xiàng)有關(guān)法律法規(guī)
·承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任
·本站評論管理人員有權(quán)保留或刪除其管轄評論中的任意內(nèi)容
·您在本站發(fā)表的作品,本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用
·參與本評論即表明您已經(jīng)閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評論文檔 | 報告錯誤  
專業(yè)書推薦 更多內(nèi)容
網(wǎng)站可用性測試及優(yōu)化指南
《寫給大家看的色彩書1》
《跟我去香港》
眾妙之門—網(wǎng)站UI 設(shè)計之道
《Flex 4.0 RIA開發(fā)寶典》
《贏在設(shè)計》
犀利開發(fā)—jQuery內(nèi)核詳解與實(shí)踐
作品集 更多內(nèi)容

雜⑦雜⑧ Gold NORMANA V2