代码编织梦想

下载文件的几种方法:

 private void writeFileBuffer(String fileName, HttpServletRequest request, HttpServletResponse response, String contentType, String exportName) {
        if (fileName == null) {
            return;
        }
        File file = new File(fileName);
        // ISO-8859-1 ==> UTF-8 进行编码转换
        extractPathFromPattern(request);
        // 其余处理略
        if (file.exists()) {
            try (InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
                 OutputStream outputStream = response.getOutputStream();
            ) {
                // 设置强制下载不打开  
                response.setContentType(contentType);
                String name = StringUtils.isEmpty(exportName) ? file.getName() : exportName;
                response.addHeader("Content-Disposition", "attachment;fileName=" + new String(name.getBytes("UTF-8"), "iso-8859-1"));

                byte[] buf = new byte[1024];
                int len;
                while ((len = inputStream.read(buf)) > 0) {
                    outputStream.write(buf, 0, len);
                }
                response.flushBuffer();

            } catch (Exception e) {
                log.info("文件下载失败" + e.getMessage());
            }
        } else {
            log.info("文件下载失败-文件不存在,filename:" + exportPath + File.separator + fileName);
        }
    }


    public void writeFileBuffer2(String fileName, HttpServletRequest request, HttpServletResponse response, String contentType, String exportName) {

        try {

            // path是指欲下载的文件的路径。

            File file = new File(fileName);
            // 取得文件名。
            String filename = file.getName();
            // 以流的形式下载文件。
            InputStream fis = new BufferedInputStream(new FileInputStream(fileName));
            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();

        }



    }


    public void writeFileBuffer3(String fileName, HttpServletRequest request, HttpServletResponse response) {

        try {

            FileInputStream fileInputStream = new FileInputStream(fileName);//字节流
            //设置文件下载方式
//            response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes()));
            ;
            //获取servlet响应输出字节流
            //        PrintWriter writer = response.getWriter();//字符流
            ServletOutputStream outputStream = response.getOutputStream(); //字节流

            //流数据交换,每次交换10k数据大小 (1024k = 1m)
            byte[] bytes = new byte[1024 * 1000];
            int read;
            do {
                read = fileInputStream.read(bytes);
                outputStream.write(bytes, 0, read);
            } while (-1 != read);

            //关闭资源
            IOUtils.closeQuietly(fileInputStream);
            IOUtils.closeQuietly(outputStream);


        } catch (Exception e) {
          System.out.println(e.getStackTrace());
        }
    }



    public HttpServletResponse download(String path, HttpServletResponse response) {
        try {

           // response.reset();
            // 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的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 e) {
            String simplename = e.getClass().getSimpleName();
            if("ClientAbortException".equals(simplename)){
                System.out.println("客户端刷新太快了");
            }else
                e.printStackTrace();

        }
        return response;
    }


    public void down1(String path,HttpServletResponse response) throws Exception {
//        response.reset();
        response.setContentType("application/octet-stream;charset=utf-8");
        response.setHeader(
                "Content-disposition",
                "attachment; filename=test.png");
        try(
                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File(path)));
                // 输出流
                BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
        ){
            byte[] buff = new byte[1024];
            int len = 0;
            while ((len = bis.read(buff)) > 0) {
                bos.write(buff, 0, len);
            }
        }
    }
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiamaocheng/article/details/127974759

JS实现文件下载的几种方法-爱代码爱编程

JS 实现下载功能的几种方法 敬你一杯毒鸡汤解解渴: 人生三大真理:暴力真的可以解决一切,帅真的可以当饭吃,有钱真的可以为所欲为。 本文主要讲述的是已知一个文件在服务器的地址(即后端提供的下载接口),在页面上怎么实现点击按钮下载的问题。 分析一下我所知道几种办法吧: HTML的a标签 <a href="url" download=

C# 下载文件的几种方法-爱代码爱编程

方法一:根据文件地址直接读取流下载或者打开(Web前端下载方法) 方法二:使用WebRequest类下载,代码如下 WebRequest request = WebRequest.Create("http://www.walnr.com/File/Base64ToFile.exe"); WebResponse response =

前端vue中实现文件下载的几种方法-爱代码爱编程

第一种 前端创建超链接,通过a标签向后端发送get请求,需要给a标签添加一个download属性 这种写法是创造了一个a标签,把地址写到a标签里再用js调用点击,实现访问文件地址就是下载了 代码如下: <a @click="downloadFile(file.url,file.originalFilename, file.id,

SpringBoot实现文件下载的几种方式-爱代码爱编程

文章目录 1. 将文件以流的形式一次性读取到内存,通过响应输出流输出到前端2. 将输入流中的数据循环写入到响应输出流中,而不是一次性读取到内存,通过响应输出流输出到前端3. 下载网络文件到本地4. 网络文件获取到服务器后,经服务器处理后响应给前端5. 常见异常和问题(1)响应对象无需通过return返回(2)返回前端的文件名必须进行URL编码(3)

python运行方法_python运行py文件的几种方法-爱代码爱编程

有时候我们在进行python编程的时候,想运行py文件,怎么运行呢,下面来分享一下方法 工具/原料 python 运行py文件的几种方法 方法一:通过命令行窗口运行 1 第一步我们首先复制一下py文件存放的路径,这里的py文件放在f盘根目录,如下图所示: 2 第二步打开命令行窗口,进去之后,首先切换到py文件的路径下面,然后输入“python py文件名

php实现文件下载的几种方式-爱代码爱编程

  本文简单介绍在PHP中几种常用文件下载方式。     一、直接链接文件下载     在知道文件路径的情况下,可以简单的通过页面“a”标签元素,直接下载文件。 代码如下:    <!DOCTYPE html> <html lang="en"> <head>     <base target="_self"&

javascript 实现下载的几种方法-爱代码爱编程

我们在项目开发过程中,经常会遇到下载功能;基于我使用过的方法做了一个总结,然后写下这篇文章作为记录! 一、使用 a 标签(get请求) a标签是最简单的方法,只需要把 文件的地址 或 接口 给 a 标签的 href 属性,可以为 a 标签添加 download 属性来指定下载的文件名;可省略download 属性,如果省略浏览器会自动识别源文件名。 &

java判断文件大小_Java实现获取文件大小的几种方法-爱代码爱编程

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 目前Java获取文件大小的方法有两种: 1、通过file的length()方法获取; 2、通过流式方法获取; 通过流式方法又有两种,分别是旧的java.io.*中FileInputStream的available()方法和新的java..nio.*中的FileChannel 下面依次介

cmd 环境下载文件的几种方法-爱代码爱编程

cmd 环境下载文件的几种方法 在渗透中通常会遇到只有cmd shell的情况,在这种情况下,通常需要下载文件来进行后续渗透。这里记录了几种在cmd下不需要其他三方程序就可以直接下载文件的方法。 1.certutilcertutil -urlcache -split -f https://www.xxx.com/test.pycertutil -url

局域网传输文件的几种方法盘点-爱代码爱编程

共享文件夹(速度一般是1~2M每秒) 1、选中要共享的文件夹,按照如图所示操作 2、Windows通过ipconfig查看ip地址 3、在要下载的电脑上(同一个局域网),如图所示操作 \共享文件的那个机器局域网ip 4、看到效果,然后将该文件夹拖到某个存放的位置即可 远程桌面连接后下载 1、运行中输入以下命令 mstsc 2、按图输入要连接

Powershell下载文件的三种方法-爱代码爱编程

Powershell下载文件的三种方法 Invork-WebRequestWebClient对象BitsTransfer模块 layout: post title: Powershell下载文件的三种方法 date: 2021-09-29 tags: [“BitsTransfer”,“download”,“powershell”,“powers

vue下载文件常用的几种方式-爱代码爱编程

vue下载文件常用的几种方式 一、直接打开 直接打开是指我们直接使用window.open(URL)的方法 优点:简单操作 缺点:没办法携带token 二、我们可以自己封装一个方法,比如如下: import axios from "axios" import * as auth from '@/utils/auth.js' let aj

前端下载文件的几种方式_赤蓝紫的博客-爱代码爱编程

前端下载文件的几种方式 前言 实习一个人负责一个管理系统的前端部分。其中,就有前端下载文件的需要。最终采用的是使用axios发送get请求的方式,因为需要携带token。但是,不应该只注重结果,也应该注重过程,不然可能一直都是拧螺丝。另外提一嘴,找工作最好还是找能去的最大的公司,虽然小公司也能学到东西,但是因为制度不完善的缘故,可能会被不好的小公司坑,