详解Java文件下载的几种实现方式

发布时间 - 2026-01-10 21:53:44    点击率:

Java文件下载的几种方式,具体如下:

public HttpServletResponse download(String path, HttpServletResponse response) {
    try {
      // path是指欲下载的文件的路径。
      File file = new File(path);
      // 取得文件名。
      String filename = file.getName();
      // 取得文件的后缀名。
      String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();

      // 以流的形式下载文件。
      InputStream fis = new BufferedInputStream(new FileInputStream(path));
      byte[] buffer = new byte[fis.available()];
      fis.read(buffer);
      fis.close();
      // 清空response
      response.reset();
      // 设置response的Header
      response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));
      response.addHeader("Content-Length", "" + file.length());
      OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
      response.setContentType("application/octet-stream");
      toClient.write(buffer);
      toClient.flush();
      toClient.close();
    } catch (IOException ex) {
      ex.printStackTrace();
    }
    return response;
  }

  public void downloadLocal(HttpServletResponse response) throws FileNotFoundException {
    // 下载本地文件
    String fileName = "Operator.doc".toString(); // 文件的默认保存名
    // 读到流中
    InputStream inStream = new FileInputStream("c:/Operator.doc");// 文件的存放路径
    // 设置输出的格式
    response.reset();
    response.setContentType("bin");
    response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
    // 循环取出流中的数据
    byte[] b = new byte[100];
    int len;
    try {
      while ((len = inStream.read(b)) > 0)
        response.getOutputStream().write(b, 0, len);
      inStream.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  public void downloadNet(HttpServletResponse response) throws MalformedURLException {
    // 下载网络文件
    int bytesum = 0;
    int byteread = 0;

    URL url = new URL("windine.blogdriver.com/logo.gif");

    try {
      URLConnection conn = url.openConnection();
      InputStream inStream = conn.getInputStream();
      FileOutputStream fs = new FileOutputStream("c:/abc.gif");

      byte[] buffer = new byte[1204];
      int length;
      while ((byteread = inStream.read(buffer)) != -1) {
        bytesum += byteread;
        System.out.println(bytesum);
        fs.write(buffer, 0, byteread);
      }
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

 //支持在线打开文件的一种方式

public void downLoad(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();
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Java  # 文件下载  # java文件下载代码  # java实现文件下载代码  # Java用文件流下载网络文件示例代码  # java实现FTP文件上传与文件下载  # JavaWeb导出Excel文件并弹出下载框  # Java Web实现文件下载和乱码处理方法  # JavaWeb实现文件上传下载功能实例详解  # JAVA SFTP文件上传、下载及批量下载实例  # Java下载文件的4种方式总结  # Java下载文件的四种方式详细代码  # java多线程文件下载器的实现  # 是指  # 几种  # 非常重要  # 读到  # 大家多多  # 清空  # attachment  # getBytes  # length 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel观察者模式如何使用_Laravel Model Observer配置  Swift开发中switch语句值绑定模式  canvas 画布在主流浏览器中的尺寸限制详细介绍  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  Linux后台任务运行方法_nohup与&使用技巧【技巧】  PythonWeb开发入门教程_Flask快速构建Web应用  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  Laravel如何保护应用免受CSRF攻击?(原理和示例)  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  Laravel中的Facade(门面)到底是什么原理  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  C++用Dijkstra(迪杰斯特拉)算法求最短路径  如何快速搭建高效WAP手机网站吸引移动用户?  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  如何快速登录WAP自助建站平台?  如何在Windows 2008云服务器安全搭建网站?  Laravel怎么实现验证码(Captcha)功能  如何在IIS7上新建站点并设置安全权限?  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  Laravel如何配置和使用缓存?(Redis代码示例)  如何确保FTP站点访问权限与数据传输安全?  个人网站制作流程图片大全,个人网站如何注销?  如何在建站主机中优化服务器配置?  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  Android GridView 滑动条设置一直显示状态(推荐)  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  Firefox Developer Edition开发者版本入口  文字头像制作网站推荐软件,醒图能自动配文字吗?  中山网站制作网页,中山新生登记系统登记流程?  EditPlus中的正则表达式实战(6)  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  如何快速搭建高效WAP手机网站?  如何快速生成ASP一键建站模板并优化安全性?  如何在云主机上快速搭建多站点网站?  怎么用AI帮你设计一套个性化的手机App图标?  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  在线制作视频的网站有哪些,电脑如何制作视频短片?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  Laravel怎么使用artisan命令缓存配置和视图  如何在服务器上配置二级域名建站?  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程