欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java文件下载

程序员文章站 2022-06-17 19:31:42
...
在网页编程时,文件下载,有一种方法就是用超链接直接指向文件所在路径(url),但该方法有一些弊端,一是在某些浏览器中会直接在网页中打开所在下载的文件,另外一个就是遇到中文文件名时,也会容易出错。解决这一问题,可直接在java代码中编写下载,如下:
public void downLoad(String id) throws IOException
{
    DocZhidu bo=(DocZhidu)dao.getObjectById(DocZhidu.class, id);
    File file = new File(ServletActionContext.getServletContext().getRealPath(DocZhiduCons.uploadPath) + "/"+bo.getName());
    FileInputStream f = new FileInputStream(file);
    byte[] fb = new byte[f.available()];
    f.read(fb);
    ServletActionContext.getResponse().setHeader("Content-disposition",
				"attachment; filename=" + new String(bo.getName().getBytes("gb2312"), "iso8859-1"));
    ByteArrayInputStream bais = new ByteArrayInputStream(fb);
    int b;
    while ((b = bais.read()) != -1)
    {
      ServletActionContext.getResponse().getOutputStream().write(b);
    }
    ServletActionContext.getResponse().getOutputStream().flush();
}


如果文件不存在时,可能会报错,上面是将异常抛出,下面代码作一简单改造,自已捕获异常并返回错误信息。
public String downLoad(String id)
{
    DocZhidu bo=(DocZhidu)dao.getObjectById(DocZhidu.class, id);
    File file = new File(ServletActionContext.getServletContext().getRealPath(DocZhiduCons.uploadPath) + "/"+bo.getName());
    String info=null;
    try {
        FileInputStream f = new FileInputStream(file);
        byte[] fb = new byte[f.available()];
        f.read(fb);
        ServletActionContext.getResponse().setHeader("Content-disposition",
 "attachment; filename=" + new String(bo.getName().getBytes("gb2312"), "iso8859-1"));
        ByteArrayInputStream bais = new ByteArrayInputStream(fb);
        int b;
        while ((b = bais.read()) != -1)
        {
          ServletActionContext.getResponse().getOutputStream().write(b);
        }
        ServletActionContext.getResponse().getOutputStream().flush();
    } 
    catch (IOException e)
    {
        info="下载的文件不存在,可能已被删除!";
    }
    return info;
}