1、常见的方式:

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

2、支持在线打开文件的一种方式:

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

3、工作中:

//org.springframework.http.ResponseEntity
public ResponseEntity<byte[]> downloadFile(HttpServletRequest request, String path) {
    try {
        File file = new File(path);
        InputStream inputStream = new FileInputStream(file);
        byte[] bytes = new byte[inputStream.available()];
        inputStream.read(bytes);
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.add("Content-Disposition", "attchement;filename=" + file.getName());
        HttpStatus statusCode = HttpStatus.OK;
        return new ResponseEntity<byte[]>(bytes, httpHeaders, statusCode);
    } catch (Exception e) {
        return new ResponseEntity("", new HttpHeaders(), HttpStatus.BAD_GATEWAY);
    }
}

http下载文件(常用方式+支持在线打开方式)相关推荐

  1. 野火串口调试助手Linux,野火串口调试助手 支持在线安装方式,永远保持最新版本 持常用的110-1152 联合开发网 - pudn.com...

    野火串口调试助手 所属分类:人工智能/神经网络/深度学习 开发工具:Java 文件大小:1036KB 下载次数:0 上传日期:2020-11-07 19:58:05 上 传 者:潮吧刘京 说明:  支 ...

  2. post方式下载文件ie8不支持

    post方式下载文件ie8不支持 以前有一篇jQuery下载文件的文章post方式下载文件,最近在进行测试的时候发现ie8这个老伙计还是不好用啊.查找错误找到这个问题进行修改后是这样的. 当然,依然需 ...

  3. 使用a标签下载文件,浏览器会直接打开解决方案

    使用a标签下载文件,浏览器会直接打开解决方案 背景 一.HTML中的a标签实现点击下载 二.即使使用a标签的download属性,chrome浏览器还是会打开 三.解决方案 解决方案一:使用ajax请 ...

  4. Servlet下载文件迅雷不支持问题真相之一

    问题描述 最近在做一个下载文件的Servlet,直接使用浏览器的下载功能,完美支持,结果测试人员使用迅雷下载,就不行了,下载也能成功完成,只是迅雷下载的文件大小是悲催的0KB 真相搜罗 网上有很多帖子 ...

  5. js下载文件、音频、视频的方式

    下载文件可以直接通过a标签的href属性直接下载,也可以通过Blob对象转换为文件流进行下载.如果要对大数据量或者需要分片下载.上传等操作,可以考虑Blob对象.同事Blob对象可以对下载过程进行额外 ...

  6. js下载文件、音频、视频的方式 vue

    1.a标签下载文件 // 这是传统的下载方式 const downloadFileA = document.createElement('a') document.body.append(downlo ...

  7. java打开pdf文件_[原创]java在线打开PDF文档

    步骤一:(涉及到的工具) 访问:http://www.zhuozhengsoft.com/dowm/,从官网下载PageOffice for Java. 步骤二:(配置工程) 1. 解压PageOff ...

  8. IDEA使用过程中相应的配置和设置(如编码设置、窗口调整以及config.xml文件模板创建、工程打开方式、约束文件)

    1. IDEA调整工具栏的位置(原来在右边,现在调整到左边),[View]-->[Appearance]-->[Toolbar] 2. IDEA调整代码区背景([File]-->[S ...

  9. 将某一类型文件还原为无默认打开方式

    原谅我的强迫症,无意中把.json文件设置成了默认了notepad打开方式,于是看到了满屏的notepad图标.我还是喜欢看清爽的图标,于是百度了好久,终于找到了将其还原为无默认打开方式的方法: 简而 ...

  10. .bat文件改为windows默认打开方式

    有的时候不小心将后缀名.bat文件在选择打开方式时误勾选了用记事本或者其他文本编辑器打开, 结果电脑上的*.bat文件的打开方式都变成了记事本或者其他文本编辑器. 本方法就是恢复.bat文件的默认打开 ...

最新文章

  1. 谷歌排名第一的编程语言,死磕它这两点,小白也能学的会!不信你看!
  2. 剑指offer十九之顺时针打印矩阵
  3. Luogu4606 SDOI2018 战略游戏 圆方树、虚树、链并
  4. linux 相册管理,图片管理(时间线、相册管理)- 深度看图 -Deepin深度系统用户手册...
  5. python 9.13作业
  6. 小妲己智能机器人要连接wifi吗_“能扫能拖,聪明能干”,360扫地机器人S7一周体验分享...
  7. rac san+oracle_Oracle11g1+RAC+install+for+CentOS5(ASM+to+FC+SAN)_IT168文库
  8. 计算机学科技术前沿:互联网上信息可信性的现状
  9. MVC防止xss攻击 ——Html.AntiForgeryToken的AJAX提交
  10. phpcmsV9 添加内容:如何“增加复选框、下拉菜单”(含案例、截图)- 教程篇
  11. 【今日CV 计算机视觉论文速览 143期】Mon, 15 Jul 2019
  12. HDU3786 找出直系亲属【关系闭包】
  13. Atlassian JIRA 插件开发之一 环境搭建
  14. 推荐4个爬虫抓包神器
  15. 360面试java经验_360测试开发技术面试题目
  16. 正则表达式提取身份证号码
  17. AD学习之旅(1)— Altium Designer 16 软件下载与安装
  18. 高中信息技术教资-笔记-存储容量之间的换算关系
  19. 听说你要删库跑路了?这篇Linux脚本请收好
  20. CHM 格式打开不显示网页

热门文章

  1. 博科光纤交换机维护手册
  2. 树莓派网易云音乐播放器
  3. java实现的身份证照片脸部识别(头像截图) 以及OCR字体识别
  4. 老男孩python全栈视频教程_老男孩Python全栈7期,Flask全套组件及原理剖析视频教程下载...
  5. Vuex2.0小米便签项目实例
  6. java毕业设计外卖管理系统mybatis+源码+调试部署+系统+数据库+lw
  7. 自己生成aar包时,含有第三方依赖,导入项目使用
  8. VS2013/SQL SERVER 产品密钥
  9. 删除win10易升更新的办法
  10. 中艺人脸识别考勤机使用方法_中控人脸识别考勤机说明书 人脸识别考勤机的使用方法...