struts中的文件下载

设置一个超链接,就可以下载一个文件了,但是通过超链接下载文件,暴露了下载文件的真实地址,不利于对资源进行安全保护;而且利用超链接下载文件,服务器端的文件只能存放在Web应用程序所在的目录下。
利用程序编码实现下载,可以增加安全访问控制,对经过授权认证的用户提供下载,还可以任意提供下载的数据,我们可以将文件放到Web应用程序以外的目录中,也可以将文件保存到数据库中。

步骤大概分三步:

第一步:dowm.jsp页面

第二步:DownAction.java编写

第三步:配置struts.xml文件

1. Down.jsp

<ahref="down?fileName=1.txt">1.txt下载</a>

Down为Action的名字,fileName为文件名,必须和DownAction中的fileName取名一直

2.  DownAction.java

public class DownAction extendsActionSupport   //继承ActionSupport可以进行异常处理
{
   private String fileName;   //filename和.jsp页面的fileName名字一直
   private String path;        //文件的下载目录
   private InputStream tagFile;  //目标文件流
    public String getFileName()
    {
       return fileName;
    }
    public void setFileName(String fileName)
    {
       this.fileName = fileName;
    }
    public String getPath()
    {
       return path;
    }
    public void setPath(String path)
    {
       this.path = path;
    }
   
//重写getTagFile方法获取返回文件流
public InputStream getTagFile() throws Exception
    {
       String p=ServletActionContext.getServletContext().getRealPath(getPath());  //使用相对路径是获取文件路径
       System.out.println(p+fileName);
       File file=new File(p+"\\"+fileName);
       InputStream stream=new FileInputStream(file);
        //returnServletActionContext.getServletContext().getResourceAsStream(p + fileName);
       returnstream;    //返回文件流结果
    }
    public void setTagFile(InputStream tagFile)
    {
       this.tagFile = tagFile;
    }
}

3. struts.xml文件配置

<!--文件下载的demo-->
  <action name="down" class="action.DownAction">
  <param name="path">/download</param>  <!-- 依赖注入下载路径-->
  path名字必须和DownAction的path名字一致
  <result name="success" type="stream">   <!—以流的形式返回-->
  <param name="contentType">application/octet-stream;charset=utf-8</param>
  <!--有输出中文的时使用<param name="contentType">application/octet-stream;charset=utf-8</param>-->
 <!--<paramname="contentType">application/x-msdownload</param>-->  //如果没有中文的话可以直接使用这个
 <param name="inputName">tagFile</param> <!-- inputName默认值为inputStream-->   tagFile名字必须和DownAction的名字一致
 <param name="contentDisposition">attachment;filename=${fileName}</param>
 ${fileName}名字和DownAction中的fileName名一致
      <param name="bufferSize">2048</param>
    </result>
  </action>

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值