struts2学习之---控制文件下载

以下是通过学习轻量级javaee企业实战一书总结:


struts2提供stream结果类型,该类型专门用于支持文件下载功能。指定stream结果类型时,需要指定一个inputStream参数,该参数自定了一个输入流,这个输入流是被下载文件的入口

1.实现文件下载的Action

 如果应用程序需要用户下载之前进行进一步检查,比如判断用户是否有足够权限来下载该文件等,就需要让struts2来控制下载了。
 Action需要提供一个返回InputStream流的方法,该输入流代表了被下载文件的入口

  public class FileDownloadAcion extends ActionSupport{
          private String inputPath;//该成员变量可以在配置文件中动态指定该值
          set,get()方法
          //返回指定文件对应的输入流
          public InputStream getTargetFile() throws Exception{
                return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
}
}

2.配置Action

 关键是需要配置一个类型为stream的结果,该stream类型的结果将使用文件下载作为响应
配置stream类型的结果需要指定如下4个参数:
1. contentType:指定被下载文件的文件类型
2. inputStream:指定被下载文件的入口输入流
3. contentDispoistion:指定下载的文件名
4. bufferSize:指定下载文件时的缓冲大小

 stream结果类型的逻辑视图是返回给客户端一个输入流,因此无需指定location属性

<action name="download" class="">
    <param name="inputPath">文件地址</param>
    <result type="stream">
        <param name="contentType"></param>
        //inputName参数的值就是方法去掉get前缀、首字母小写的字符串
        <param name="inputName">targetFile</param>
        <param name="contentDisposition">fileName=""</param>
        <param name="bufferSize">4096</param>
    </result>
</action>

3.下载前的授权控制

 下面的Action的execute方法在返回success字符串之前,首先通过判断session里的user属性是否为haha,如果用户通过验证就允许下载,否则之间返回登录页面。

  public class AuthorityAction implements Action{
      private String inputPath;
      set,get()方法

      public InputStream getTargetFile() throws Exception{
            return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
} 
      public String execute() throws Exception{
          ActionContext ctx = ActionContext.getContext();
          Map session = ctx.getSession();
          String user = (String)session.get("user");
          if(user ! = null && user.equals("haha")){
                  return SUCCESS;
          }
          ctx.put("tip","登录的用户名不正确,请重新登录");
          return LOGIN;
      }
}

 struts.xml配置文件的配置

  <action name="authoritydown" class="">
      <result type="stream">
          <param name="contentType">  </param>
          <param name="inputStream">targetfile</param>
          <param name="contentDiposition">filename=""</param>
          <param name="bufferSize">4096</param>
      </result>
      <result name="login">/WEB-INF/content/</result>
</action>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值