首页 > 编程语言 >Java下载文件的四种方式详细代码

Java下载文件的四种方式详细代码

时间:2022-11-26 12:22:18浏览次数:65  
标签:Java String 代码 len filename new byte response 四种

原文链接:https://www.jb51.net/article/232182.htm

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

2.下载本地文件

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.下载网络文件

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.支持在线打开的方式

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

原文链接:https://www.jb51.net/article/232182.htm

 

标签:Java,String,代码,len,filename,new,byte,response,四种
From: https://www.cnblogs.com/stepforeward/p/16927213.html

相关文章

  • js文件模块化引用问题(JavaScript modules)
    有个前端项目,需要用到配置文件。这个配置文件实在是太大了,就想拆成多个小的,然后一一引入,组合成一个完整的配置文件。如果是vue代码,这种情况根本是手到擒来,不费吹灰之力,而该......
  • 【Java】数据类型隐式判断缺陷修复
    公司之前有一个与第三方团队合作开发的项目,由于过程沟通出现问题,导致整合测试时出现较多问题。其中有一个最经典的就是关于数据类型隐式判断的缺陷修复,追查代码用了2天的时......
  • 让你的Python代码更干净只需简单一步
    你可以将这两个文件拷贝到自己的项目根目录中,然后执行一次pre-commitinstall,这样每次提交代码的时候,都是干净的代码,是不是很方便?说起来容易做起来难,我们都知道代码可读性......
  • Java Web中requset,session,application 的作用域及区别
    三者概述requset概述:request是表示一个请求,只要发出一个请求就会创建一个request用处:常用于服务器间同一请求不同页面之间的参数传递,常应用于表单的控件值传递。sessio......
  • 零基础自学javase黑马课程第十六天
    零基础自学javase黑马课程第十六天✨欢迎关注......
  • 零基础自学javase黑马课程第十四天
    零基础自学javase黑马课程第十四天✨欢迎关注......
  • 用YAPF让Python代码瞬间从丑陋变漂亮
    要把Python代码写漂亮,必须遵循PEP8Python编码规范:《​​PEP8--StyleGuideforPythonCode​​​》。但记住PEP8规范,是一件非常痛苦的事情,还好Google发布了一个自动整......
  • JavaScript 读写剪切板
    浏览器环境下,JavaScript读写剪切板读取剪切板varp=navigator.clipboard.readText();p.then(function(clipText){console.log(clipText);//剪贴板内容});......
  • 用Python代码画世界杯吉祥物拉伊卜(附代码)
    用Python代码画世界杯吉祥物拉伊卜(附代码)世界杯正在火热进行中,世界杯的吉祥物拉伊卜也非常火。本文用Python代码画世界杯吉祥物。不废话,可以直接先看视频效果。视频效果用P......
  • Java lambda表达式基本使用
    代码示例:java.lambda.LambdaExpression1本质lambda表达式本质上是对匿名内部类实例的一种简化写法。1.1案例有以下List<Integer>对象:List<Integer>list=Arra......