posts - 22, comments - 17, trackbacks - 0, articles - 15
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          使用servlet來下載文件,其原理非常簡單,只要得到文件的輸入流(或相應(yīng)字節(jié)),然后寫輸出流即可?,F(xiàn)就其中的幾個細節(jié)問題展開:
          1. MIME類型的設(shè)置:
          Web 瀏覽器使用 MIME 類型來識別非 HTML 文檔,并決定如何顯示該文檔內(nèi)的數(shù)據(jù)。
          例如EXCEL文件的 MIME 類型是 "application/vnd.ms-excel "。要用servlet 來打開一個 EXCEL 文檔,需要將 response 對象中 header 的 contentType 設(shè)置成“application/vnd.ms-excel ”。
          response.setContentType(contentType);
          2. Content disposition
          HTTP response header中的content-disposition 允許 servlet 指定文檔表示的信息。使用這種header ,你就可以將文檔指定成單獨打開(而不是在瀏覽器中打開),還可以根據(jù)用戶的操作來顯示。
          如果用戶要保存文檔,你還可以為該文檔建議一個文件名。這個建議名稱會出現(xiàn)在 Save As 對話框的“文件名”欄中。如果沒有指定,則對話框中就會出現(xiàn) servlet 的名字。
          servlet 中,將 header 設(shè)置成下面這樣:
          response.setHeader("Content-disposition","attachment;filename="+ "Example.xls" );

          response.setHeader("Content-Disposition", "inline; filename="fliename)
          點擊打開會在ie中打開。

          需要說明的有三點:
          ? 中文文件名需要進行iso8859-1轉(zhuǎn)碼方可正確顯示:
          fileName = new String(fileName.getBytes("GBK"),"iso8859-1");
          ? 傳遞的文件名,需要包含后綴名(如果此文件有后綴名),否則丟失文件的屬性,而不能自行選擇相關(guān)程序打開。
          ? 有下載前詢問(是打開文件還是保存到計算機)和通過IE瀏覽器直接選擇相關(guān)應(yīng)用程序插件打開兩種方式,前者如上代碼所示,后者如下:
          response.setHeader("Content-disposition","filename="+ "Example.xls" );
          3. 在研究文件的上傳及下載過程中,有幾點體會
          程序的I/O操作往往是性能的瓶頸所在,java io定義了兩個基本的抽象類:InputStream和OutputStream,對于不同的數(shù)據(jù)類型比如磁盤,網(wǎng)絡(luò)又提供了不同的實現(xiàn),java.io也提供了一些緩沖流(BufferedStream),使硬盤可以很快的讀寫一大塊的數(shù)據(jù), 而Java基本的I/O類一次只能讀寫一個字節(jié),但緩沖流(BufferedStream)可以一次讀寫一批數(shù)據(jù),,緩沖流(Buffered Stream)大大提高了I/O的性能。所以:
          ?小塊小塊的讀寫數(shù)據(jù)會非常慢,因此,盡量大塊的讀寫數(shù)據(jù)
          ?使用BufferedInputStream和BufferedOutputStream來批處理數(shù)據(jù)以提高性能
          ?對象的序列化(serialization)非常影響I/O的性能,盡量少用


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


          網(wǎng)站導(dǎo)航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 琼海市| 丘北县| 苗栗市| 女性| 行唐县| 淅川县| 华容县| 金沙县| 临湘市| 邳州市| 宁蒗| 屯昌县| 郓城县| 峨山| 海宁市| 延边| 呼玛县| 昭通市| 吉林市| 黄平县| 喀喇沁旗| 阆中市| 嘉义市| 嘉善县| 武定县| 报价| 随州市| 琼结县| 高邮市| 凤阳县| 阳信县| 项城市| 沙洋县| 枣庄市| 错那县| 昭觉县| 贺州市| 太和县| 盐城市| 碌曲县| 眉山市|