濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > jsp實(shí)現(xiàn)文件上傳下載的程序示例

jsp實(shí)現(xiàn)文件上傳下載的程序示例

熱門標(biāo)簽:商洛電銷 杭州語音電銷機(jī)器人軟件 北票市地圖標(biāo)注 電銷機(jī)器人是有一些什么技術(shù) 地圖標(biāo)注線上教程 四川保險(xiǎn)智能外呼系統(tǒng)商家 高德地圖標(biāo)注樣式 杭州ai語音電銷機(jī)器人功能 電銷機(jī)器人好賣么

一、文件上傳
上傳文件是Web開發(fā)中經(jīng)常要用到的功能:例如在基于B/S的人事信息管理系統(tǒng)中上傳照片,在新聞發(fā)布系統(tǒng)中上傳圖片等等。。。。。要實(shí)現(xiàn)文件上傳功能,就需要綜合利用java中的文件輸入和輸出相關(guān)的類。
在TCP/IP中,最早出現(xiàn)的文件上傳機(jī)制是FTP。它是將文件由客服端發(fā)送到服務(wù)器的標(biāo)準(zhǔn)機(jī)制,能夠考慮到跨平臺(tái)的文本和二進(jìn)制格式文件。但是在jsp編程中不能使用FTP方法來上傳文件,這是由jsp 運(yùn)行機(jī)制所決定的。
下面是上傳文件的jsp頁(yè)面:

復(fù)制代碼 代碼如下:

form action="file?file=upload" method="post" enctype="multipart/form-data">
    請(qǐng)選擇你要上傳的文件:input type="file" name="upload" siez="16">br>
    input type="submit" value="提交">
  /form>

對(duì)于文件上傳表單處理其中method必須為post,也要增加類型enctype="multipart/form-data"。這樣就可以把文件中的數(shù)據(jù)作為流式數(shù)據(jù)上傳。當(dāng)然無論是什么文件格式,均可以。。。
下面是servlet 處理程序:

復(fù)制代碼 代碼如下:

//接收上傳文件內(nèi)容中臨時(shí)文件的文件名
        String tempFileName = new String("tempFileName");
        //tempfile 對(duì)象指向臨時(shí)文件
        File tempFile = new File("D:/"+tempFileName);
        //outputfile 文件輸出流指向這個(gè)臨時(shí)文件
        FileOutputStream outputStream = new FileOutputStream(tempFile);
        //得到客服端提交的所有數(shù)據(jù)
        InputStream fileSourcel = request.getInputStream();
        //將得到的客服端數(shù)據(jù)寫入臨時(shí)文件
        byte b[] = new byte[1000];
        int n ;
        while ((n=fileSourcel.read(b))!=-1){
            outputStream.write(b,0,n);
        }

        //關(guān)閉輸出流和輸入流
        outputStream.close();
        fileSourcel.close();

        //randomFile對(duì)象指向臨時(shí)文件
        RandomAccessFile randomFile = new RandomAccessFile(tempFile,"r");
        //讀取臨時(shí)文件的第一行數(shù)據(jù)
        randomFile.readLine();
        //讀取臨時(shí)文件的第二行數(shù)據(jù),這行數(shù)據(jù)中包含了文件的路徑和文件名
        String filePath = randomFile.readLine();
        //得到文件名
        int position = filePath.lastIndexOf('\\');
        CodeToString codeToString = new CodeToString();
        String filename = codeToString.codeString(filePath.substring(position,filePath.length()-1));
        //重新定位讀取文件指針到文件頭
        randomFile.seek(0);
        //得到第四行回車符的位置,這是上傳文件數(shù)據(jù)的開始位置
        long  forthEnterPosition = 0;
        int forth = 1;
        while((n=randomFile.readByte())!=-1(forth=4)){
            if(n=='\n'){
                forthEnterPosition = randomFile.getFilePointer();
                forth++;
            }
        }

        //生成上傳文件的目錄
        File fileupLoad = new File("D:/work space/JSP workspace/jsp_servlet_upAndLoad/file","upLoad");
        fileupLoad.mkdir();
        //saveFile 對(duì)象指向要保存的文件
        File saveFile = new File("D:/work space/JSP workspace/jsp_servlet_upAndLoad/file/upLoad",filename);
        RandomAccessFile randomAccessFile = new RandomAccessFile(saveFile,"rw");
        //找到上傳文件數(shù)據(jù)的結(jié)束位置,即倒數(shù)第四行
        randomFile.seek(randomFile.length());
        long endPosition = randomFile.getFilePointer();
        int j = 1;
        while((endPosition>=0)(j=4)){
            endPosition--;
            randomFile.seek(endPosition);
            if(randomFile.readByte()=='\n'){
                j++;
            }
        }

        //從上傳文件數(shù)據(jù)的開始位置到結(jié)束位置,把數(shù)據(jù)寫入到要保存的文件中
        randomFile.seek(forthEnterPosition);
        long startPoint = randomFile.getFilePointer();
        while(startPointendPosition){
            randomAccessFile.write(randomFile.readByte());
            startPoint = randomFile.getFilePointer();
        }
        //關(guān)閉文件輸入、輸出
        randomAccessFile.close();
        randomFile.close();
        tempFile.delete();

其中CodeToString()方法是一個(gè)中文字符處理的方法。如果文件不進(jìn)行編碼轉(zhuǎn)換,則上傳后的文件名將會(huì)是亂碼,接收的文件數(shù)據(jù)也會(huì)是亂碼:
下面是CodeToString()源代碼:

復(fù)制代碼 代碼如下:

//處理中文字符串的函數(shù)
    public String codeString(String str){
        String s = str;
        try {
            byte[] temp = s.getBytes("utf-8");
            s = new String(temp);
            return s ;
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return s;
        }
    }

二:文件下載

實(shí)現(xiàn)文件下載的最簡(jiǎn)單的方法就是使用超鏈接。假設(shè)在服務(wù)器上web目錄下地upload子目錄存在user.doc這個(gè)文檔。如:
a href="http://localhost:8080/upload/user.doc">下載user.doc/a>
當(dāng)單擊這個(gè)超級(jí)鏈接時(shí),將會(huì)在瀏覽器中直接打開這個(gè)文檔,就像是把word軟件嵌入在瀏覽器中一樣。
打開文檔后就可以實(shí)現(xiàn)另存為了。當(dāng)然在web上,最常見的方式是單擊鏈接后,出現(xiàn)“另存為”對(duì)話框:

復(fù)制代碼 代碼如下:

//獲取要下載的文件名
        String filename = request.getParameter("name");
        //得到想客服端輸出的輸出流
        OutputStream outputStream = response.getOutputStream();
        //輸出文件用的字節(jié)數(shù)組,每次向輸出流發(fā)送600個(gè)字節(jié)
        byte b[] = new byte[600];
        //要下載的文件
        File fileload = new File("D:/work space/JSP workspace/jsp_servlet_upAndLoad/file/upLoad",filename);       
        //客服端使用保存文件的對(duì)話框
        response.setHeader("Content-disposition", "attachment;filename="+filename);
        //通知客服文件的MIME類型
        response.setContentType("application/msword");
        //通知客服文件的長(zhǎng)度
        long fileLength = fileload.length();
        String length = String.valueOf(fileLength);
        response.setHeader("Content_length", length);
        //讀取文件,并發(fā)送給客服端下載
        FileInputStream inputStream = new FileInputStream(fileload);
        int n = 0;
        while((n=inputStream.read(b))!=-1){
            outputStream.write(b,0,n);
        }

在該程序中,response對(duì)象的setContentType()用來定義服務(wù)器發(fā)送給客服端內(nèi)容的MIME類型。這里對(duì)MIME就不特別介紹了。事實(shí)上,凡是瀏覽器能處理的所有資源都有對(duì)應(yīng)的MIME資源類型。在與服務(wù)器的交互中,瀏覽器就是對(duì)html、jsp等文件瀏覽器直接將其打開。對(duì)于word、excel等瀏覽器自身不能打開的文件則調(diào)用相應(yīng)的方法。對(duì)于沒有標(biāo)記MIME類型的文件。瀏覽器則根據(jù)其擴(kuò)展名和文件內(nèi)容猜測(cè)其類型。。。

您可能感興趣的文章:
  • Jsp頁(yè)面實(shí)現(xiàn)文件上傳下載類代碼
  • jsp中點(diǎn)擊圖片彈出文件上傳界面及預(yù)覽功能的實(shí)現(xiàn)
  • Jsp+Servlet實(shí)現(xiàn)文件上傳下載 文件上傳(一)
  • AJAX和JSP實(shí)現(xiàn)的基于WEB的文件上傳的進(jìn)度控制代碼
  • jsp文件上傳與下載實(shí)例代碼
  • jsp中點(diǎn)擊圖片彈出文件上傳界面及實(shí)現(xiàn)預(yù)覽實(shí)例詳解
  • 利用jsp+Extjs實(shí)現(xiàn)動(dòng)態(tài)顯示文件上傳進(jìn)度
  • jsp 文件上傳瀏覽,支持ie6,ie7,ie8
  • servlet+JSP+mysql實(shí)現(xiàn)文件上傳的方法
  • JSP實(shí)現(xiàn)文件上傳功能

標(biāo)簽:青島 紅河 江西 丹東 云浮 貴州 宿州 西藏

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《jsp實(shí)現(xiàn)文件上傳下載的程序示例》,本文關(guān)鍵詞  jsp,實(shí)現(xiàn),文件,上傳下載,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《jsp實(shí)現(xiàn)文件上傳下載的程序示例》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于jsp實(shí)現(xiàn)文件上傳下載的程序示例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    同德县| 哈密市| 东丽区| 吉林市| 报价| 绥德县| 河间市| 剑阁县| 汝南县| 景宁| 武鸣县| 沙坪坝区| 新源县| 昌乐县| 石楼县| 海口市| 康平县| 景洪市| 虎林市| 黔江区| 蓝田县| 浦江县| 阿克陶县| 丹东市| 肥乡县| 永新县| 吴江市| 嘉兴市| 金寨县| 黎川县| 栖霞市| 渑池县| 平湖市| 裕民县| 达州市| 大田县| 娄烦县| 商洛市| 双城市| 贵州省| 区。|