亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Struts框架文件授權(quán)下載的實現(xiàn)

        2017-07-10 09:54:58林海菁
        科學(xué)與財富 2017年20期

        林海菁

        (江西工業(yè)貿(mào)易職業(yè)技術(shù)學(xué)院 南昌 330100)

        摘 要:用action的stream結(jié)果類型實現(xiàn)文件的下載功能,從而有效地解決文件下載的權(quán)限控制問題,并根據(jù)系統(tǒng)的功能需求完成與下載相關(guān)的其它工作。

        關(guān)鍵詞:Struts框架;授權(quán)下載;stream結(jié)果類型;文件輸入流

        一、引言

        網(wǎng)站中的文件下載是比較常用的功能,實現(xiàn)起來也很簡單,只要有一個關(guān)聯(lián)到相關(guān)資源文件的超鏈接就可以實現(xiàn)下載,不需要編寫服務(wù)器端代碼。然而這樣的下載方式雖然易于實現(xiàn),卻難以實施權(quán)限控制。例如,我們希望資源對所有人可見,但只有登錄用戶可以下載,或者下載前需要扣除用戶賬戶積分。對于這樣的功能要求,常規(guī)的超鏈接直接關(guān)聯(lián)到資源文件的方式便無法滿足需求了,要考慮其它的技術(shù)手段。

        在Struts框架中,一種可行的方法是用action來處理文件的下載,然后就可以通過登錄檢查攔截器來控制只有登錄用戶才能下載資源,或者在action中根據(jù)系統(tǒng)需要,在下載前扣除用戶賬戶積分,如果賬戶積分不足,則不能下載,等等各種需求均可實現(xiàn)。

        二、使用action處理文件下載

        使用action來處理文件的下載而不是通過超鏈接直接鏈接到資源文件,這是實現(xiàn)授權(quán)下載的第一步。而通過action來實現(xiàn)文件下載則需要用到action的一種名為stream的result結(jié)果類型。這種結(jié)果類型可以向客戶端提供文件輸入流,既可用于文件下載,也可用于動態(tài)生成文件。

        使用stream結(jié)果類型需要在Action類中定義一個返回InputStream的方法,所謂InputStream就是提供給客戶端的文件輸入流,即被下載文件的入口。返回InputStream的方法可以使用默認(rèn)的名稱getInputStream(),這樣可以免去在配置文件中設(shè)置參數(shù)的麻煩。在getInputStream()方法中,可以調(diào)用ServletContext提供getResourceAsStream()方法返回指定文件對應(yīng)的輸入流,具體代碼如下:

        public InputStream getInputStream(){

        String filepath="……";//要下載的文件路徑名,可以使用自應(yīng)用程序根目錄開始的絕對路徑,例如“/download/work.rar”,其中“download”是位于WebRoot文件夾中的子文件夾。

        return ServletActionContext.getServletContext().getResourceAsStream(filepath);

        }

        這里使用變量filepath表示要下載的文件路徑名,可以通過頁面?zhèn)鬟f的參數(shù)間接得到要下載的文件名。例如用參數(shù)fileId得到頁面提交的要下載的文件的資源編號,再調(diào)用資源類的有關(guān)方法獲得這個資源的文件名filename,并根據(jù)所在文件夾的位置得到文件路徑名filepath,為getInputStream()方法的執(zhí)行提供必要的信息。

        在Action類中定義了getInputStream()方法之后,接下來我們還需要創(chuàng)建具體處理下載任務(wù)的action方法。本例就直接使用默認(rèn)的execute( )方法,并且先不做任何控制,直接在execute( )方法中寫上“return SUCCESS;”語句,無條件下載文件。在這個Action類中,我們定義了私有變量fileId和它的setter及getter,用來接收頁面?zhèn)鬟f的資源編號,從而知道是要下載哪個資源。另外還定義了私有屬性filename和它的setter及getter,稍后將用它向struts.xml配置文件傳遞文件名信息。

        定義action方法后,在struts.xml中配置action以及action的stream結(jié)果類型。當(dāng)action返回success結(jié)果視圖時,struts框架會自動調(diào)用getInputStream()方法得到指定文件的輸入流,向客戶端提供指定文件的下載。具體配置代碼如下所示:

        attachment;filename=${filename}

        其中參數(shù)“contentDisposition”指定了文件下載的處理方式和保存下載文件的默認(rèn)文件名。

        文件下載的處理方式包括內(nèi)聯(lián)(inline)和附件(attachment)兩種方式。在不設(shè)置的情況下默認(rèn)是內(nèi)聯(lián)方式,瀏覽器會嘗試直接顯示文件。假如是瀏覽器可以打開的文件類型,如圖像文件、文本文件等,就會直接把圖像或文件內(nèi)容顯示在瀏覽器窗口。假如是瀏覽器無法打開的文件類型,如office文檔、壓縮文件等,就會出現(xiàn)另存為或新建下載任務(wù)對話框進(jìn)行下載。附件方式則會直接出現(xiàn)另存為或新建下載任務(wù)對話框進(jìn)行下載。

        除出彈出對話框進(jìn)行下載,通常我們還希望在對話框中顯示默認(rèn)的文件名,這個文件名通常是要下載的文件的原文件名,因此filename=${filename}就是用來將原文件名設(shè)置為下載時的默認(rèn)文件名。${filename}是取action中變量filename的值,即要下載的文件的原文件名。為了解決配置文件顯示${filename}值時出現(xiàn)的中文亂碼的問題,可以在getFilename()方法中返回filename的“ISO-8859-1”編碼格式的字符串。

        至此,使用action下載文件的功能已實現(xiàn),接下來就可以以此為依托,實現(xiàn)授權(quán)控制。

        三、下載的授權(quán)控制

        如果需要對下載權(quán)限進(jìn)行控制,例如未登錄用戶不能下載,那么可以使用自定義的登錄驗證攔截器對剛才的下載action進(jìn)行攔截,假如攔截器發(fā)現(xiàn)用戶未登錄,則顯示提示信息并跳轉(zhuǎn)到登錄頁面而不執(zhí)行后續(xù)的下載action。

        如果下載要扣除賬戶積分,積分不足則不能下載,那么可以在下載的action中比較當(dāng)前登錄用戶的賬戶積分與下載資源所需要花費(fèi)的積分,如果不足則返回其它結(jié)果視圖并給出相應(yīng)的提示信息,只有在賬戶積分足夠的情況下才返回SUCCESS結(jié)果視圖執(zhí)行下載。

        通常,對于已支付積分下載過的資源,再次下載時可以不用二次扣費(fèi)。如果這樣的話,那么可以用一個數(shù)據(jù)表記錄用戶付費(fèi)下載過的資源,在下載前先查看用戶是否為這個資源付過費(fèi),如果付過就不再扣積分也不能再查積分是否足夠下載了。

        還有很多其它的下載控制及相關(guān)工作,借助這個action方法,都可以實現(xiàn),這里就不再贅述了。

        久久国产成人精品国产成人亚洲 | 国产中文欧美日韩在线| 78成人精品电影在线播放| 福利一区二区三区视频在线 | 特黄特色的大片观看免费视频| 国产曰批免费视频播放免费s| 久久成人黄色免费网站| 亚洲日本中文字幕高清在线| 宅男66lu国产在线观看| 色先锋资源久久综合5566| 无码人妻专区一区二区三区| 成人高清在线播放视频| 曰本女人与公拘交酡| 1000部精品久久久久久久久| 少妇av免费在线播放| 亚洲精品久久视频网站| 337p日本欧洲亚洲大胆精品| 国产精品美女久久久久久2018| 亚洲一区二区高清在线| 青青草在线免费播放视频| a级毛片100部免费观看| 国产精品18禁久久久久久久久| 一区二区三区在线视频爽| 色狠狠一区二区三区中文| 免费无码一区二区三区蜜桃大| 国产精品 精品国内自产拍| 老司机在线免费视频亚洲| 日韩视频在线观看| 国产亚洲av片在线观看18女人| 久久久久国产精品四虎| 亚洲av人片在线观看| 国产高清av首播原创麻豆| 亚洲国产精品久久久久久网站| 成人性生交大片免费看i| 亚洲综合网国产精品一区| 嫖妓丰满肥熟妇在线精品| 国产亚洲女人久久久久久| 亚洲男人综合久久综合天堂| 777亚洲精品乱码久久久久久| 国产艳妇av在线出轨| 青草草视频在线观看华人免费|