jsp中通過資料流向用戶端傳送資料

來源:互聯網
上載者:User
js|用戶端|資料 jsp中通過資料流向用戶端傳送資料

/**
@作者 : 慈勤強
@Email : cqq1978@Gmail.com
*/



有人經常會問這樣一個問題:“伺服器端程式如何向用戶端輸出一個檔案,然後讓瀏覽器

開啟一個儲存檔案的對話方塊,來儲存這個檔案。” 當然了,一個很簡單的做法,就是做一個

串連,指向要輸出的檔案,比如 <a href="a.rar">下載a.rar</a>,這樣,當使用者點擊

串連的時候就會彈出IE的儲存檔案對話方塊,然後下載。



不過,這樣做有兩方面的缺陷:



一是,瀏覽器有時候會自作聰明,對於一些常見的檔案類型會調用相關的應用程式開啟,

比如,下載一個word文檔.doc檔案, 有時候瀏覽器會預設用word程式開啟它。



二是,就是防止盜鏈的問題。一個使用者可以直接通過url地址來隨意的引用這個檔案,造成

檔案的盜用。



現在,在jsp中就可以直接通過檔案流的方式向用戶端寫資料,類似於我們在asp中用到

的adodb.stream對象。這樣,我們就可以把我們需要保護的檔案放到Web根目錄以外的地方,

比如web根目錄在F:\tomcat\webapps\ROOT,而我們可以把檔案放到f:\software\目錄

下,這樣別人就沒有辦法通過調用url來下載檔案了。



好了,下面我們就來看看代碼如何編寫。



首先,設定一下response對象的contenttype為 APPLICATION/OCTET-STREAM;



接著,設定response對象的http header屬性 Content-Disposition 為一個檔案名稱,

比如: attachment; filename="a.rar" ,其中的filename是“另存新檔”對話方塊出現的

檔案名稱。



最後,就要用 FileInputStream 對象從檔案中讀取資料,然後輸出。

具體例子為:

<%
String filename = "JavaFlash.rar";
String filepath = "f:\\";
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition","attachment; filename=\"a.rar\"");
java.io.FileInputStream fileInputStream =new java.io.FileInputStream(filepath+filename);
int i;
while ((i=fileInputStream.read()) != -1) {
out.write(i); }
fileInputStream.close();
out.close();
%>


特別值得注意的一點就是: 這種方法是直接從檔案中讀取資料,然後輸出到用戶端。 所以在整個檔案中,不能再



向用戶端輸出任何資訊,因為通過別的方式輸出的資訊也會儲存在檔案中,這樣就破壞了檔案的結構了。比如,

<%符號前面出現的哪怕一個空格,一個斷行符號都不可以,所以千萬要小心。




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.