Strut2文件下载

Struts2控制文件下载,可以在文件下载之前做一些操作。这里就以权限控制为例,简单实现一下Struts2的文件下载。

一、Struts2文件下载的Action配置,是提供了一个能返回InputStream流的方法,这个方法是被下载文件的入口。方法名在struts的配置文件里面配置。

DownloadAction.java

package actions;

import java.io.InputStream;
import java.util.Map;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class DownloadAction extends ActionSupport {
    private String inputPath;

    public void setInputPath(String inputPath) {
        this.inputPath = inputPath;
    }

    public InputStream getTargetFile() throws Exception {
        return ServletActionContext.getServletContext().getResourceAsStream(
                "/测试.jpg");
    }

    // 下载文件前的权限控制
    // 取出session中的用户名判断是否允许下载,如不允许,跳转到登录页面登录。
    @Override
    public String execute() throws Exception {
        System.out.println(ServletActionContext.getServletContext()
                .getRealPath("/测试.jpg"));
        ActionContext ctx = ActionContext.getContext();
        Map session = ctx.getSession();
        String user = (String) session.get("user");
        if (user != null && user.equals("yangys")) {
            return SUCCESS;
        }
        ctx.put("tip", "您还没有登录系统!");
        return LOGIN;
    }
}

二、配置下载文件的Action

配置下载文件的Action需要将result类型配置为stream,如下粗体部分,一般指定4个参数

  • contentType 下载文件的类型
  • inputName 下载文件的InputStream入口方法名去掉get,首字母小写
  • contentDisposition 下载文件的文件名
  • bufferSize 下载文件时缓冲大小,单位字节

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="yang" extends="struts-default">
        <action name="login" class="actions.LoginAction">
            <result name="success">index.jsp</result>
        </action>
        <action name="download" class="actions.DownloadAction">
            <param name="inputPath">"/测试.jpg"</param>
            <result type="stream">
                <param name="contentType">image/jpg</param>
                <param name="inputName">targetFile</param>
                <param name="contentDisposition">filename="测试.jpg"</param>
                <param name="bufferSize">4096</param>
            </result>
            <result name="login">login.jsp</result>
        </action>
    </package>
</struts>

在这里,为了实现权限控制,配置了一个login的Action,是为了实现登录后可以下载文件的效果。同时,也提供了一个简单的LoginAction.java

package actions;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    //登录成功后,将用户信息保存在session中
    @Override
    public String execute() throws Exception {
        ActionContext ctx = ActionContext.getContext();
        if (username != null && username.equals("yangys")) {
            ctx.getSession().put("user", username);
            return SUCCESS;
        }
        ctx.put("tip", "用户名或密码错误!");
        return LOGIN;
    }

}

三、两个jsp页面代码如下:

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><s:text name="文件下载测试"/></title>
</head>
<body>
    <s:form action="download">
        <s:submit value="下载" />
    </s:form>
</body>
</html>

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><s:text name="loginPage" /></title>
</head>
<body>
    <s:form action="login">
        <s:textfield name="username" key="user" />
        <s:submit name="login"/>
    </s:form>
</body>
</html>

注:本示例是为了演示,下载文件时检查是否已经登录,如没有登录,则需要登录,登录成功后即可下载。故将下载文件表单放在了index.jsp中

时间: 2024-12-25 11:01:49

Strut2文件下载的相关文章

struts2文件下载的编写步骤(文件导出)和输入流转换的方法

strut2文件下载三部曲:一个流.两个头信息 说明: ①一个流,在Action中需要一个getInputStream()的方法来获取下载的内容,其中inputStream是默认的,他会指示StreamResult获得inputStream属性的getter方法. ②两个头,一个为ContentType:默认rext/plain文件形式.主要作用是根据下载的文件类型进行文件设置,需要的任何MIME可以在tomcat里面的配置文件中找到 另一个头是ContentDisposition:默认inli

Struts2 文件下载(中文处理方法以及控制下载文件名称和扩展名)

Struts2的框架提供了现成的文件下载方式,大大简化的问价下载的使用便利性.网上的列子有很多,我把一些大家普遍比较关注的点,集中一下,给出一个整体方案. 一般我们照着书本或者网上的列子写出了一个Demo,都会存在几个疑问: 1.下载文件的文件名怎么搞?不搞的话浏览器默认名字是提交的action的名字 2.文件名里面想搞中文,但是实际上下载文件名出现了乱码或不显示中文怎么搞? 3.文件的扩展名怎么搞?比如要下载的文件是word(doc,docx)或者excel(xls,xlsx)怎么办?难道让用

PHP实现文件下载

PHP实现文件下载 PHP下载文件 js下载文件 项目操作中不可避免要提供文件的下载,有时候要写一些逻辑判断或者提示啥,那下载的方法就需要做些调整.做个下载文件的集锦: readfile — 输出文件 (手册上有说明:读入一个文件并写入到输出缓冲.) <?php $file = 'monkey.gif' ; if ( file_exists ( $file )) { header ( 'Content-Description: File Transfer' ); header ( 'Conten

struts2文件下载

<!-- 文件下载 --> <action name="download" class="cn.action.demo2.DownloadAction"> <!-- 返回 流结果 --> <result type="stream"> <!-- inputName 用于指定 返回输入流的方法名 默认值 inputStream --> <!-- targetFile 需要在Action

Struts2 多文件下载

Step1:导入支持jar包 commons-fileupload-1.3.1.jar commons-io-2.4.jar jstl-1.2.jar standard-1.1.2.jar commons-compress-1.10.jar 文件压缩工具包 Step2:编写请求下载jsp <script type="text/javascript" src="jquery-1.8.3.js"></script> <%@taglib pr

iOS开发 -文件下载(4 暂停和恢复)

iOS开发网络篇—文件下载(四·暂停和恢复) 一.Range简单说明 通过设置请求头Range可以指定每次从网路下载数据包的大小 Range示例 bytes=0-499 从0到499的头500个字节 bytes=500-999 从500到999的第二个500字节 bytes=500- 从500字节以后的所有字节 bytes=-500 最后500个字节 bytes=500-599,800-899 同时指定几个范围 Range小结 - 用于分隔 前面的数字表示起始字节数 后面的数组表示截止字节数,没

[WebApi] 捣鼓一个资源管理器--文件下载

<打造一个网站或者其他网络应用的文件管理接口(WebApi)第一章--之-- "文件下载" > ======================================================== 作者:qiujuer 博客:blog.csdn.net/qiujuer 网站:www.qiujuer.net 开源库:Genius-Android 转载请注明出处:blog.csdn.net/qiujuer/article/details/41621781 =====

文件下载Demo

知识点: //获取用户要下载的资源的名称        string name=context.Request.Params["downloadName"];        //设置响应报文中,当前资源是一个附件,需要下载.        context.Response.AddHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(name));    

android webview downloadManager文件下载管理

一.downloadmanager类说明: 从Android 2.3开始新增了一个下载管理类,在SDK的文档中我们查找android.app.DownloadManager可以看到.下载管理类可以长期处理多个HTTP下载任务,客户端只需要给出请求的Uri和存放目标文件的位置即可,下载管理使用了一个AIDL服务器所以可以放心的在后台执行,同时实例化的方法需要使用getSystemService(Context.DOWNLOAD_SERVICE) ,Android123再次提醒使用API Level