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

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

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

    posts - 89,  comments - 98,  trackbacks - 0
    Web開(kāi)發(fā)人員都有過(guò)這樣的疑問(wèn),如何讓一個(gè)文件,尤其是一個(gè)已知類(lèi)型的文件,發(fā)送到客戶(hù)端,直接提示讓瀏覽者下載,而不是用與它相關(guān)聯(lián)的程序打開(kāi)。以前我們最常用的辦法就是把這樣的文件加到鏈接上,這樣可以讓瀏覽者通過(guò)點(diǎn)擊鼠標(biāo)右鍵的目標(biāo)另存為來(lái)下載所鏈接的文件。但是,這樣有兩個(gè)不足的地方:
    一是:如果瀏覽器能夠識(shí)別已下載文件的擴(kuò)展名,則瀏覽器就會(huì)激活該擴(kuò)展名所關(guān)聯(lián)的程序來(lái)打開(kāi)所下載的文件。比如:在Windows平臺(tái)上,如果用戶(hù)點(diǎn)擊的鏈接鏈接的是一個(gè)“.doc”文件的話(huà),那么,瀏覽器就會(huì)啟動(dòng)Microsoft Word應(yīng)用程序來(lái)打開(kāi)它。
    二是:如果采用鏈接的辦法的話(huà),任何能看到該鏈接的人都可以下載該文件,你雖然也可以對(duì)所下載的文件進(jìn)行權(quán)限設(shè)置,但那樣做也不是很方便的。有時(shí)候我們需要更為靈活和富有彈性的方式,下面的程序能夠很方便地克服以上兩方面的不足。
    這種辦法是可靠的,但你必須記住:沒(méi)有授權(quán)的用戶(hù)不能夠通過(guò)在瀏覽器地址欄里輸入文件的URL來(lái)取得該文件的下載權(quán)。所以,要下載的文件應(yīng)該放到虛擬目錄之外的一個(gè)目錄里,比如:如果你的虛擬目錄是C:\Mengxianhui\Tomcat4\Website\MyApp的話(huà),那么,存放在該目錄和該目錄下的任何子目錄下所有文件對(duì)因特網(wǎng)上的任何用戶(hù)都是可見(jiàn)的。要直接下載一個(gè)文件,我們需要做兩件事,第一件事是:設(shè)定響應(yīng)的內(nèi)容類(lèi)為“application/octet-stream”,大小寫(xiě)無(wú)關(guān)。第二件事是:設(shè)置HTTP的響應(yīng)頭名字為:Content-Disposition,設(shè)定值為:attachment; filename = theFileName。這里的theFileName就是出現(xiàn)在文件下載對(duì)話(huà)框里的默認(rèn)文件名,通常和所下載的文件名字相同,但也可以不同。下面,我們就平常最常用的JSP和ASP頁(yè)面來(lái)舉一個(gè)實(shí)際應(yīng)用的例子。

    TestFileDownload.JSP頁(yè)面的例子:

    <%
    // 得到文件名字和路徑
    String filename = "MengxianhuiDocTest.doc";
    String filepath = "D:\\";

    // 設(shè)置響應(yīng)頭和下載保存的文件名
    response.setContentType("APPLICATION/OCTET-STREAM");
    response.setHeader("Content-Disposition",
    "attachment; filename=\"" + filename + "\"");

    // 打開(kāi)指定文件的流信息
    java.io.FileInputStream fileInputStream =
    new java.io.FileInputStream(filepath + filename);

    // 寫(xiě)出流信息
    int i;
    while ((i=fileInputStream.read()) != -1) {
    out.write(i);
    }
    fileInputStream.close();
    out.close();
    %>

    值得注意的是:在你要下載的文件內(nèi)容里,除了文件的內(nèi)容之外,不應(yīng)該再附加有其它任何的字符,包括空格和回車(chē)換行符。我們有時(shí)在編寫(xiě)代碼的時(shí)候,為了使代碼清晰可讀,往往會(huì)添加一些空格、制表符或者回車(chē)換行符,這樣雖然看起來(lái)比較清晰,但有時(shí)可能會(huì)得不到正確的結(jié)果。比如:
    <%@ page import="java.io.*"
    %> <jsp:useBean id="MyBeanFromMengxianhui" scope="page"
    class="com.Mengxianhui.DownloadBean" />
    應(yīng)該寫(xiě)成這樣:
    <%@ page import="java.io.*"%>

    <jsp:useBean id="MyBeanFromMengxianhui" scope="page" class="com.Mengxianhui.DownloadBean" />
    posted on 2006-09-08 15:22 水煮三國(guó) 閱讀(593) 評(píng)論(2)  編輯  收藏 所屬分類(lèi): J2EE

    FeedBack:
    # re: JSP 制作文件下載碰到的問(wèn)題
    2006-09-08 23:07 | JonneyQuest
    可以設(shè)置conf/web.xml里面那個(gè)叫jsp的Servlet,它有一個(gè)屬性屬性是trimSpace,設(shè)為true之后文件前后多余的空格和回車(chē)換行都會(huì)被忽略掉了。  回復(fù)  更多評(píng)論
      
    # re: JSP 制作文件下載碰到的問(wèn)題
    2006-09-11 11:13 | 水煮三國(guó)
    謝謝JonneyQuest指正!  回復(fù)  更多評(píng)論
      
    <2006年9月>
    272829303112
    3456789
    10111213141516
    17181920212223
    24252627282930
    1234567

    常用鏈接

    留言簿(4)

    隨筆分類(lèi)(85)

    隨筆檔案(89)

    文章分類(lèi)(14)

    文章檔案(42)

    收藏夾(37)

    java

    oracle

    Sybase

    搜索

    •  

    積分與排名

    • 積分 - 210789
    • 排名 - 266

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 黄色视屏在线免费播放| 九九精品国产亚洲AV日韩| 国产免费久久精品丫丫| 国产成人精品免费视频大全五级 | 亚洲国产成人乱码精品女人久久久不卡 | 久久一本岛在免费线观看2020| 曰批全过程免费视频在线观看| 亚洲精品国产精品乱码不99| 国产精品九九久久免费视频 | 久久久久久AV无码免费网站下载| 亚洲日韩中文无码久久| 久久嫩草影院免费看夜色| 中文字幕一精品亚洲无线一区| 中国黄色免费网站| 99久久精品国产亚洲| 97在线观看永久免费视频| 亚洲人成色4444在线观看| 国产免费人成在线视频| 久久久WWW成人免费精品| 亚洲成a人片在线观看日本| 91制片厂制作传媒免费版樱花 | 亚洲精品成人久久| 成年女人视频网站免费m| 亚洲国产欧美日韩精品一区二区三区| 无码一区二区三区免费视频 | 3344在线看片免费| 久久精品国产亚洲av水果派 | 伊人免费在线观看高清版| 亚洲午夜久久影院| 成人免费视频软件网站| 国产亚洲美女精品久久久久| 亚洲熟妇av一区二区三区漫画| 久久久久久AV无码免费网站下载| 国产亚洲福利在线视频| 亚洲精品无码av天堂| 在线免费观看国产| 老司机午夜免费视频| 色拍自拍亚洲综合图区| 欧洲精品免费一区二区三区| 一区二区三区在线免费观看视频 | 久久精品国产99国产精品亚洲|