struts2实现页面文件下载

action

public class DownLoadAction extends BaseSupportAction
{
    String filePath;
    private DownLoadServ serv = null;
    public void downFile()
    {
        LOG.info("需要下载的文件路径:" + filePath);
        // String filePath, HttpServletResponse response, boolean isOnLine
        try
        {
            serv.downFile(filePath, ServletActionContext.getResponse(), false);
        }
        catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public String getFilePath()
    {
        return filePath;
    }

    public void setFilePath(String filePath)
    {
        this.filePath = filePath;
    }

    public DownLoadServ getServ()
    {
        return serv;
    }

    public void setServ(DownLoadServ serv)
    {
        this.serv = serv;
    }
}

service

public class DownLoadServ
{
    /**
     * @param filePath
     */
    public void downFile(String filePath, HttpServletResponse response, boolean isOnLine)
            throws Exception
    {
        File f = new File(filePath);
        if (!f.exists())
        {
            response.sendError(404, "File not found!");
            return;
        }
        BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
        byte[] buf = new byte[1024];
        int len = 0;
        response.reset(); // 非常重要
        if (isOnLine)
        { // 在线打开方式
            URL u = new URL("file:///" + filePath);
            response.setContentType(u.openConnection().getContentType());
            response.setHeader("Content-Disposition", "inline; filename=" + f.getName());
            // 文件名应该编码成UTF-8
        }
        else
        { // 纯下载方式
            response.setContentType("application/x-msdownload");
            response.setHeader("Content-Disposition",
                    "attachment; filename=" + f.getName());
        }
        OutputStream out = response.getOutputStream();
        while ((len = br.read(buf)) > 0)
            out.write(buf, 0, len);
        br.close();
        out.close();
    }
}

页面
<a href="downFile.action?filePath="文件路径">文件名</a>

只需在页面上传入文件路径即可完成下载。也适用于其他框架。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值