关于Struts2文件下载的问题,首先要准备好一下几个包:
新建一个项目,整体架构如下(可以忽略掉Upload,因为那是我前面写上传的时候用的):
接着就通过一下实例来实现吧。
1、DownloadAction.java
- 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.jsp
- <%@ 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>
然后部署后运行效果图如下:
点击“123.jpg”文件后弹出窗口下载: