struts2文件下载

发布于 2021-11-28 21:16:31 字数 4160 浏览 816 评论 2

今天学习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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

可是我不能没有你 2021-11-29 09:06:26

引用来自“kai164”的评论


getTarget()方法,FileInputStream类的构造方法参数应是File类型

绝情姑娘 2021-11-29 01:04:34


getTarget()方法,FileInputStream类的构造方法参数应是File类型

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文