1.以流的方式下载

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

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;

    }

2.下载本地文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

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

        }

    }

3.下载网络文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

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

        }

    }

4.支持在线打开的方式

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

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下载文件的四种方式详细代码相关推荐

  1. java 文件下载详解_Java 从网上下载文件的几种方式实例代码详解

    废话不多说了,直接给大家贴代码了,具体代码如下所示: package com.github.pandafang.tool; import java.io.BufferedOutputStream; i ...

  2. Java下载文件的几种方式

    public HttpServletResponse download(String path, HttpServletResponse response) {try {// path是指欲下载的文件 ...

  3. 【文件下载】java下载文件的几种方式(本地下载、从网络上下载、在线浏览)

    原文地址:https://www.cnblogs.com/sunny3096/p/8204291.html 1.以流的方式下载. public HttpServletResponse download ...

  4. asp.net 浏览器下载文件的四种方式

    其实不是自己想要的,自己希望能够弹一个窗口出来选择保存的路径 protected void Button1_Click(object sender, EventArgs e){protected vo ...

  5. java读取XML文件的四种方式

    java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT& ...

  6. Java File.createNewFile 创建文件的四种方式小笔记

    本文为joshua317原创文章,转载请注明:转载自joshua317博客 Java File.createNewFile 创建文件的四种方式小笔记 - joshua317的博客 1.File(Str ...

  7. Java 实现多线程的四种方式 超详细

    Java 实现多线程的四种方式 文章目录 Java 实现多线程的四种方式 一.继承 Thread 类 二.实现 Runnable 接口 三.实现 Callable 接口 四.线程池 1,Executo ...

  8. 创建和应用Java包文件的两种方式(转)

    创建和应用Java包文件的两种方式(转) <Java编程艺术>章节选登.作者:高永强 清华大学出版社 (即将出版) 12.1  包--package    ... 12.1.1  包命名规 ...

  9. python 下载文件-Python下载文件的11种方式

    原标题:Python下载文件的11种方式 在本教程中,你将学习如何使用不同的Python模块从web下载文件.此外,你将下载常规文件.web页面.Amazon S3和其他资源. 最后,你将学习如何克服 ...

最新文章

  1. Java,Hello world 欢迎进入Java世界
  2. android测量的三种模式
  3. tesseract 识别中文字符
  4. 使用Navicat for Oracle新建用户无法登陆(用户名大小写问题)
  5. Core-java面试题第一套上篇
  6. conversion to dalvik format failed with error 1的解决办法
  7. python在工厂中的运用_在python中使用元类实现工厂设计模式
  8. 在 Redis 上实现的分布式锁
  9. 父母该不该把自己的收入告诉孩子?
  10. 漫画:什么是删库跑路?
  11. 2022年 iOS面试题总结
  12. Thinkphp使用CKEditor4富文本编辑器
  13. Call to a member function validate() on null
  14. OSPF路由器类型 ABR与ASBR路由聚合区别
  15. 【R语言】Studio的下载及安装及RStudio打开后空白的解决
  16. Web前端学习笔记(五)--- 手风琴菜单
  17. 把自己曾经写的一个客户间聊天的程序与大家分享(2)
  18. 学习LSSVM以及区别LSSVM和SVM看的几篇博文
  19. iOS资源帖-优秀博客、iOS开发技术文、学习网站
  20. 全局唯一ID发号器的几个思路

热门文章

  1. BZOJ3781小B的询问
  2. 27服务-SecurityAccess
  3. Ubuntu18.04设置连接网络,使虚拟机下的Ubuntu18.04可以上网
  4. __name__ == ‘__main__‘ 是什么意思
  5. IR780 NH2可用作光热疗法治疗剂,IR780-氨基
  6. 7-18 二分法求多项式单根 (20 分)
  7. 2018第二届易观算法大赛报名啦
  8. vue发布订阅模式,发布订阅模型
  9. 达梦数据库FINDS_IN_SET函数
  10. 一起写个Dubbo——0. 一些不得不说的话