struts2文件下载
今天学习struts2文件下载时,遇到下面的问题,求指教:
下载页面downpage.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'down.jsp' starting page</title> </head> <body> <s:actionmessage /> <a href="${pageContext.request.contextPath }/down?res=新建文本文档.txt&resType=application/vnd.ms-powerpoint&resName=struts.txt">下载ppt</a> <a href="${pageContext.request.contextPath }/down?res=WEB-INF/resources/新建文本文档.txt&resType=application/vnd.ms-powerpoint&resName=struts.txt">下载ppt</a> </body> </html>
action:
package cn.liuning.action; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; //通用的文件下载action,因此很多内容是可变的 //1.下载的文件资源 //2.下载的文件类型 //3.下载的文件名 public class DownAction extends ActionSupport { private String res;// 下载文件的文件全名; private String resType;// 下载文件的类型 private String resName;// 下载时显示的名字 public String getRes() { return res; } public void setRes(String res) throws IOException { this.res = new String(res.getBytes("ISO-8859-1"), "UTF-8"); } public String getResType() { return resType; } public void setResType(String resType) { this.resType = resType; } public String getResName() { return resName; } public void setResName(String resName) { this.resName = resName; } // 文件下载的入口 public InputStream getTarget() throws IOException { // 该方法返回res资源所对应的输入流。 return new FileInputStream(ServletActionContext.getServletContext() .getRealPath("/") + res); } @Override public String execute() throws Exception { Integer userId = Integer.parseInt((String) ActionContext.getContext() .getSession().get("userid")); if (userId == null || userId < 0) { // 用户没登陆,没有权限 return LOGIN; } return SUCCESS; } }
struts.xml:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <action name="down" class="org.fkjava.struts2.action.DownAction"> <result type="stream"> <!-- 指定二进制流的类型 --> <param name="contentType">${resType}</param> <!-- 指定InputStream返回的方法 --> <param name="inputName">target</param> <param name="contentDisposition">filename=${resName}</param> <!-- 控制文件下载时的缓冲大小 --> <param name="bufferSize">4096</param> </result> <result name="login">/WEB-INF/content/login.jsp</result> </action> <action name="loginPro" class="org.fkjava.struts2.action.LoginAction"> <result>/WEB-INF/content/downpage.jsp</result> <result name="error">/WEB-INF/content/login.jsp</result> </action> <action name="*"> <result>/WEB-INF/content/{1}.jsp</result> </action> </package> </struts>
文件放置目录:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
引用来自“kai164”的评论
在
getTarget()方法,FileInputStream类的构造方法参数应是File类型
在
getTarget()方法,FileInputStream类的构造方法参数应是File类型