作者:禅楼望月

当下载的文件名字中不含有汉字,或者下载的文件不需要考虑用户的权限问题时。直接让超链接的href属性为所要下载的文件名即可。否则最好使用struts2的文件下载机制。

以下载图片为例

完整的代码:

action:

import java.io.File;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;

public class FileDownloadAction implements Action{
    private String filepath=null;

    private InputStream inputStream=null;
    public void setFilepath(String filepath) {
        this.filepath = filepath;
    }

    public InputStream getFile(){
        return inputStream;
    }

    @Override
    public String execute() throws Exception {
        String filename=ServletActionContext.
                getRequest().getParameter("filename");
        inputStream=ServletActionContext.
                getServletContext().getResourceAsStream(filepath+
                        File.separator+filename);
        if(inputStream!=null){
            return SUCCESS;
        }else {
            return ERROR;
        }
    }
}

struts.xml配置:

<package name="syxpj"  extends="struts-default" namespace="/syxpj">
    <action name="download" class="download" >
        <result name="success" type="stream">
            <param name="contentType">image/jpg</param>
            <param name="inputName">file</param>
            <param name="contentDisposition">filename="${request['filename']}"</param>
            <param name="bufferSize">1024</param>
        </result>
    </action>
</package>

使用:

<a href="${pageContext.request.contextPath}/syxpj/download.action?filename=belle.jpg">数据模板</a>

其他文件只需要将action 的result的contentType参数变为相应的值即可。

注意:getResourceAsStream读取的文件路径只局限与工程的源文件夹中,包括在工程src根目录下,以及类包里面任何位置,但是如果配置文件路径是在除了源文件夹之外的其他文件夹中时,该方法是用不了的。

最新文章

  1. 非空二叉树的一个有趣的性质:n0 = n2 + 1
  2. nodePPT初认识启动与手机控制
  3. MVC ,Action方法传数据给视图有几种方式?--PS:tempData和Viewbag,还有ViewData之间的区别
  4. Ubuntu 14.04中文输入法的安装
  5. C#2
  6. Unity3d:播放物理目录下的MP3文件
  7. android studio class org.bouncycastle.asn1.asn1primitive overrides final method equals
  8. openURL的使用方法
  9. HashTable和HashMap的区别
  10. unity 距离某天还有多久
  11. 无显示仍然发挥树莓派——VNCserver设定
  12. ANDROID PAD版本号 PHONE版本号 源代码有什么 差别?
  13. 最新虚拟机SAP ECC6.0 EHP7带示例数据IDES版+BW740
  14. redis集群搭建及注意事项
  15. C#导出EXCEL没有网格线的解决方法
  16. SSM-SpringMVC-17:SpringMVC中深度剖析HandlerAdapter处理器适配器底层
  17. Python教学课程分享
  18. eclipse 设置
  19. MOOC Linux内核之旅小结【转】
  20. MyBatis从入门到放弃二:传参

热门文章

  1. yum仓库客户端搭建和NTP时间同步客户端配置
  2. 高级同步器:信号量Semaphore
  3. Java : 实体类不能序列化异常
  4. 方别《QQ群霸屏技术》,又见《QQ群建群细则》
  5. phpstudy apache启动失败,80端口占用问题解决方案
  6. pads怎么高亮网络
  7. Python学习之模块基础
  8. QOS-CBQ概述
  9. 一个新晋IT行业的努力Duiker
  10. Windows10 快捷键