大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 關于Struts2文件下載的介紹

關于Struts2文件下載的介紹

更新時間:2022-02-10 08:39:45 來源:動力節點 瀏覽1082次

文件下載路徑問題,項目運行時MyEclipse會加載Tomcat的webapps目錄下的項目。所以,關于路徑問題(一定要設置相對路徑強度)

下載到本地服務器需要相對路徑。最好使用絕對路徑上傳到客戶端

上傳文件需要很多包。

1. Struts 2 支持文件下載

Struts 2 支持通過 org.apache.slruts2.dispatcher.Stream ResuIt 的結果類型下載文件。

它使下載易于編寫的程序變得更加容易。

StreamResuIt 結果類型使用 HttpServletResponse 對象返回的 ServletOutputStrcam 對象,將下載文件的二進制數據輸出到客戶端,有以下參數:contentType發送到 Web 瀏覽器的數據流的 MIME 類型(默認為 text/plain)是下載文件的內容類型。

當客戶端向Tomcat請求靜態資源時,Tomcat會自動在Response Head中添加“Content-Type”屬性,并配置具體屬性列表。

contentLength

數據流的長度,以字節為單位(瀏覽器顯示進度條),即下載文件的長度

contentDisposition:

該屬性配置下載文件的文件名等屬性,其中文件類型分為inline和attachment: 1.inline:瀏覽

器嘗試直接打開文件(默認值)

2.attachment:瀏覽器下載直接作為附件

也不是絕對的。這適用于瀏覽器可以顯示的下載。對于瀏覽器不支持的下載,即使使用了內聯選擇。

項目仍會彈出文件下載對話框。contentDispostion 的默認值是 inline。

inputName

Action 中用于下載文件的屬性名稱,類型為 InputStream。默認識別為 inputStream

inputName:用于指定下載文件的輸入流入口,需要在Action中指定。也就是說需要action定義對應的屬性類型InputStream。默認為輸入流。

如果在Action中聲明了getInputStream()方法,則在配置文件struts.xml中配置為<param name="inputName">inputStream</param>。

如果在 Action 中聲明了 getTargetFile() 方法,則配置文件 struts.xml 配置為<param name="inputName">targetFile </param>。

bufferSize

文件數據從輸入復制到輸出的緩沖區大小,默認1024字節

allowCaching

是否允許緩存

StreamResult 結果類型已在 struts-default 文件中定義為邏輯名稱流。

<結果名稱=“成功”類型=“流”>
				<param name="contentType">文本/純文本</param>
				<param name="inputName">輸入流</param>
                //這里的filename就是要下載的文件名。
				<param name="contentDisposition">附件;filename="hello.txt"</param>
				<param name="bufferSize">1024</param>
			</結果>

案例

  <正文>
	<s:調試/>
	<s:a href="download?fileName=a.txt">下載一種方式</s:a>
	<a href="download?fileName=a.txt">向下模式二</a>
  </正文>
公共類 DownloadAction 擴展 ActionSupport {
	私有字符串文件名;
	公共輸入流 getInputStream() 拋出 IOException {
		字符串路徑 = ServletActionContext.getServletContext().getRealPath(fileName);
		/**
		 * 方法1 File file = new File(路徑);返回新的文件輸入流(文件);
		 * 方法二 FileUtils.openInputStream(file);
		 */
		文件文件 = 新文件(路徑);
		返回 FileUtils.openInputStream(file);
	}
	公共字符串 getFileName() {
		返回文件名;
	}
	公共無效 setFileName(字符串文件名){
		this.fileName = 文件名;
	}
	@覆蓋
	公共字符串執行()拋出異常{
		返回 super.execute();
	}
	公共無效setInputStream(輸入流輸入流){
	}
}
	    <動作
			名稱="下載"
			類="action.DownloadAction">
			<結果名稱=“成功”類型=“流”>
				<param name="contentType">文本/純文本</param>
				<param name="inputName">輸入流</param>
				<param name="contentDisposition">附件;filename="hello.txt"</param>
				<param name="bufferSize">1024</param>
			</結果>
		</行動>

此時,不要忘記導入包,以及導入哪個包的FileUtils,仔細看import org.apache.commons.io.FileUtils;

缺點或改進

缺點

如果要下載任意目錄下的文件(不僅僅是Web應用目錄),只需要修改action返回文件輸入流的方式,比如return new FileInputStream(inputPath)。

在實際應用中,下載的文件不應該配置在struts.xml文件中。如果是這樣,則相當于將 FileDownloadAction 的功能限制為僅下載一個文件。下載文件的選擇應該通過編碼來實現。根據瀏覽器的下載請求,查詢配置文件或數據庫,獲取真正的下載文件數據,構造inputStream對象。

對于下載的文件名和下載的文件類型,它們是在struts.xml 文件中配置的。如果用戶要下載的文件類型很多,這種方式顯然不夠靈活。

改進

為了動態設置文件類型和下載文件名,我們可以寫一個攔截器,在Action執行前動態添加StreamResult的參數,執行結果。

為了在結果執行之前攔截調用,我們需要使用 PreResultListener 接口,可以通過 Action lnvocation 注冊該接口,并在結果執行之前獲取回調。PreResultListener 需要在攔截器中注冊,所以我們需要編寫一個攔截器,然后

在攔截器方法中注冊一個 PreResultListener 實例。

下載文件時出錯

java.lang.IllegalArgumentException:在調用堆棧中找不到名稱為 [inputStream] 的 java.io.InputStream。
檢查為此操作指定的 <param name="inputName"> 標記。
	在 org.apache.struts2.result.StreamResult.doExecute(StreamResult.java:234)
ERROR DefaultDispatcherErrorHandler 處理請求時發生異常:
java.lang.IllegalArgumentException:在調用堆棧中找不到名稱為 [inputStream] 的 java.io.InputStream。
 檢查為此操作指定的 <param name="inputName"> 標記。

這是因為 ServletActionContext.getServletContext().getResourceAsStream(path+fileName); 返回值為空。

也就是說,文件的路徑不對。如果大家對此比較感興趣,想了解更相關知識,可以關注一下動力節點的Struts2視頻教程,里面還有更豐富的知識等著大家去學習,希望對大家能夠有所幫助。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 四虎影院观看视频 | 国产精品国产自线在线观看 | 四虎永久免费影院 | 九九久久久2| 激情综合婷婷亚洲图片 | 天上人间影院久久国产 | 四虎国产在线 | 久久精品国产主播一区二区 | 精品在线小视频 | 亚洲精品乱码久久久久久蜜桃 | sihu国产精品永久免费 | 99国产视频 | 色视频播放| 欧美激情高清免费不卡 | 欧美日韩综合 | 一级毛片私人影院 | 四虎网站最新地址 | 久久久久亚洲精品影视 | 国内精品久久久久久久久久影视 | 伊人久色 | 欧美成人免费夜夜黄啪啪 | 4虎影院永久地址www | 久久99精品一区二区三区 | 久久精品国产亚洲精品 | 国产福利在线播放 | 尹人成人网| 四虎免费在线视频 | 欧美日韩国产亚洲一区二区三区 | 成人国产亚洲欧美成人综合网 | 香蕉视频日本 | 福利在线观看视频 | 欧美精品亚洲精品日韩 | 欧美夜夜骑 | 日韩精品一区二区三区中文 | 大伊香蕉精品视频在线天堂 | 久久香蕉国产线看观看乱码 | 亚洲码和乱人伦中文一区 | 久久一日本道色综合久久m 久久一色本道亚洲 | 欧美a视频 | 爱综合网| 欧美日韩国产高清精卡 |