關於Struts2文件下載的問題,首先要準備好一下幾個包:html
新建一個項目,總體架構以下(能夠忽略掉Upload,由於那是我前面寫上傳的時候用的):java
接着就經過一下實例來實現吧。apache
一、DownloadAction.java
json
- package com.action;
- import java.io.InputStream;
- import org.apache.struts2.ServletActionContext;
- import com.opensymphony.xwork2.ActionSupport;
- public class DownloadAction extends ActionSupport{
- private String inputPath; //該屬性能夠在配置文件中動態指定該屬性值
- /**
- * 依賴注入該屬性值的setter方法
- * @param inputPath
- */
- public void setInputPath(String inputPath) {
- this.inputPath = inputPath;
- }
- /**
- * 定義一個返回InputStream的方法;該方法將做爲被下載文件的入口
- * 且須要配置stream類型結果時指定inputName參數
- * InputName參數的值就是方法去掉個體前綴,首字母小寫的字符串
- * @return
- */
- public InputStream getTargetFile() {
- //ServeltContext提供getResourceAsStream()方法返回指定文件對應的輸入流
- return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
- }
- }
2.Struts.xml架構
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
- <struts>
- <constant name="struts.custom.i18n.resources" value="mess" />
- <constant name="struts.i18n.encoding" value="UTF-8" />
- <constant name="struts.devMode" value="true"></constant>
- <package name="lee" extends="json-default">
- <!-- 文件上傳 -->
- <action name="uploadAction"
- <!-- 文件下載 -->
- <action name="downloadAction" class="com.action.DownloadAction">
- <!-- 指定被下載內容的位置 -->
- <param name="inputPath">/upload/123.jpg</param>
- <result name="success" type="stream">
- <!-- 制定下載文件的文件類型 -->
- <param name="contentType">p_w_picpath/jpg</param>
- <!-- 指定由getTargetFile()方法返回被下載文件的InputStream -->
- <param name="inputName">targetFile</param>
- <param name="contentDisposition">p_w_upload;filename="123.jpg"</param>
- <!-- 指定下載文件的緩衝大小 -->
- <param name="bufferSize">4096</param>
- </result>
- </action>
- </package>
- </struts>
success.jspjsp
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <%@taglib prefix="s" uri="/struts-tags" %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>My JSP 'success.jsp' starting page</title>
- </head>
- <body>
- 文件 <b><a href="downloadAction.action?filename=123.jpg" target="_black">123.jpg</a></b> 上傳成功! <br>
- </body>
- </html>
而後部署後運行效果圖以下:ide
點擊「123.jpg」文件後彈出窗口下載:this