1.在實際應用開發中,文件下載功能也非常常見。
2.最簡單的文件下載方式是通過超鏈接來進行文件下載:
<body> <a href="download/s.txt">課件</a><br/> <a href="download/t.jpg">美女</a><br/> <a href="download/jstl-1.2.jar">jstl</a> </body>
注意:直接通過超鏈接下載文件,如果瀏覽器能夠讀取文件,瀏覽器會直接讀取,而不會下載到本地。並且有安全問題。所以,可以通過action來實現下載。
3.Struts2文件下載功能的實現:
Action實現
public class DownloadAction { private String fileName; public String execute(){ return Action.SUCCESS; } //獲取文件流 public InputStream getInputStream() throws FileNotFoundException{ String path=ServletActionContext.getServletContext().getRealPath("/download"); return new FileInputStream(new File(path,fileName)); } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } }
Struts.xml
<package name="default" extends="struts-default" namespace="/"> <action name="download" class="cn.sxt.action.DownloadAction"> <result type="stream"> <!-- 根據inputName生產的get方法 到Action中去取得該方法的返回值 --> <param name="inputName">inputStream</param> <!-- 設置下載的文件 直接保存 --> <param name="contentDisposition">attachment;filename=${fileName}</param> </result> </action> </package>
jsp
<body> <a href="download/2.txt">課件</a> <br /> <a href="download/1.jpg">美女</a> <br /> <hr /> <a href="download.action?fileName=2.txt">課件</a> <br /> <a href="download.action?fileName=1.jpg">美女</a> <br /> </body>
或者 Action的另一種寫法:
public class DownloadAction { private String fileName; private InputStream inputStream; public String execute() throws FileNotFoundException{ String path=ServletActionContext.getServletContext().getRealPath("/download"); inputStream = new FileInputStream(new File(path,fileName)); return Action.SUCCESS; } public InputStream getInputStream() { return inputStream; } public void setInputStream(InputStream inputStream) { this.inputStream = inputStream; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } }