Struts2 文件下载

Struts2 文件下载

页面jsp 页面代码

<table>

    <tr>

       <td>文件名</td>

<td>

    <a href=”shop/ materialAction-matdownload?material.cmaterialId=对象Id”>下载</a>

<%--访问Action 中定义的下载方法传值Id--%>

</td>

</tr>

</table>

 

Action 代码

Public class MaterialAction{

    private String matName;                //下载资料名称

    private Material material;             //资料实例

 

/**

     * 设置资料名称

     * @param matName

     */

    public void setMatName(String matName) {

       this.matName = matName;

    }

 

    /**

     * 获取资料名称

     * @return

     * @throws UnsupportedEncodingException

     */

    public String getMatName() throws UnsupportedEncodingException {

       //在服务器端通过设置http Header 设置了客户端的默认的字符集编码

       ServletActionContext.getResponse().setHeader("charset", "ISO8859-1");

       return new String(this.matName.getBytes(),"ISO8859-1");

}

 

public String getMaterial(){

    return material;

}

public String setMaterial(Material material){

    this.material= material;

}

 

 

/**

     * 课程资料下载

     * @return

     */

    public String matdownload(){

       try {

           material = materialBiz.findById(material.getCmaterialId());//根据资料Id 获取资料

           setMatName(material.getDataName());    //资源原名字赋值给下载文件名

           this.setMaterial(material);            //把完整的资料详细赋值给下载资料

           return "matDownload";       //对应于Struts2 配置文件的result name=”matDownload

       } catch (Exception e) {

           e.printStackTrace();

           return ERROR;

       }

    }

 

    /**

     * 下载课程资料下载方法

     * @return

     */

    public InputStream getMatdownloadFile() throws IOException{

       String path = material.getDataAddress();//获取相对路径

InputStream is = ServletActionContext.getServletContext().getResourceAsStream(path);

       return is;

    }

}

 

Struts2 配置文件

  <!-- 商城的package  -->

<package name="shop" namespace="/shop" extends="qixuejia-default">

<action name=” materialAction-*” class=” MaterialAction” method=”{1}”>
<!--type  stream 应用 StreamResult 处理-->   
<result name=”matDownload” type=”stream”>
<!--让浏览器知道文件类型 默以为 text/plain application/x-msdownload’ web contentType全部类型-->

<param name="contentType">application/x-msdownload;charset=ISO8859-1</param>
 <!-- 默认为 inline(在线打开),设置为 attachment 将会告诉浏览器下载该文件,filename  指定下载文件时的文件名,若未指定将会是以浏览的页面名作为文件名,如以 matName 作为文件名 -->   
<param name="contentDisposition">attachment;filename=${matName}</param>
<!-- 默认就是 inputStream,它将会指示 StreamResult 通过 inputName 属性值的 getter 方法比如这里就是 getInputStream() 来获取下载文件的内容,意味着你的 Action 要有这个方法 -->
<param name="inputName">matdownloadFile</param>
<!-- 输出时缓冲区的大小 -->
<param name="bufferSize">2048</param>
<result>

</action>

</package>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值