Springboot如何通过流返回文件

目录
  • 如何通过流返回文件
    • controller类如下
    • 工具类DownLoadUtils如下
  • 以流的方式直接返回

如何通过流返回文件

本人的文件是放在resource/templates目录下,截图如下

controller类如下

    @GetMapping(value = "/downfile")
    public void download(HttpServletResponse response) throws IOException {
        String fileName = "template.xlsx";
        // 设置信息给客户端不解析
        String type = new MimetypesFileTypeMap().getContentType(fileName);
        // 设置contenttype,即告诉客户端所发送的数据属于什么类型
        response.setHeader("Content-type",type);
        // 设置编码
        String code = new String(fileName.getBytes("utf-8"), "iso-8859-1");
        // 设置扩展头,当Content-Type 的类型为要下载的类型时 , 这个信息头会告诉浏览器这个文件的名字和类型。
        response.setHeader("Content-Disposition", "attachment;filename=" + code);
        response.setContentType("application/octet-stream;charset=ISO8859-1");
        response.addHeader("Pargam", "no-cache");
        response.addHeader("Cache-Control", "no-cache");
        DownLoadUtils.download(fileName, response);
    }

工具类DownLoadUtils如下

public class DownLoadUtils {
    public static void download(String filename, HttpServletResponse res) throws IOException {
        // 发送给客户端的数据
        // 读取filename
        ClassPathResource classPathResource = new ClassPathResource("templates/"+filename);
        long length = classPathResource.getFile().length();
        res.addHeader("Content-Length",String.valueOf(length));
        OutputStream outputStream = res.getOutputStream();
        byte[] buff = new byte[1024];
        BufferedInputStream bis = null;
        InputStream inputStream =classPathResource.getInputStream();
        bis = new BufferedInputStream(inputStream);
        int i = bis.read(buff);
        while (i != -1) {
            outputStream.write(buff, 0, buff.length);
            outputStream.flush();
            i = bis.read(buff);
        }
        bis.close();
        outputStream.close();
    }
}

注意点

response.addHeader("Content-Length",String.valueOf(file.length()));

如果不加这句代码,下载下来的文件会 在打开前提示修复,文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配

以流的方式直接返回

import java.io.FileReader;
import java.io.InputStream;
import java.util.Properties;
/*
 */
public class Reflect {
    public static void main(String[] args) throws Exception{
       //获取一个文件的绝对路径!!!
        // 这种是先获得绝对路径然后在转换成流。
//        String path = Thread.currentThread().getContextClassLoader()
//                .getResource("classinfo2.properties").getPath();
//        FileReader reader = new FileReader(path);
        //下面这种是直接用流的方式返回。
        InputStream reader = Thread.currentThread().getContextClassLoader()
                .getResourceAsStream("classinfo2.properties");
        Properties pro = new Properties();
        pro.load(reader);
        reader.close();
        //通过key获取value。
        String className = pro.getProperty("className");
        System.out.println(className);
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • springboot实现返回文件流

    目录 springboot返回文件流 springboot返回二进制文件流 springboot返回文件流 @GetMapping(value = "/file/{fileName}") public ResponseEntity<FileSystemResource> getFile(@PathVariable("fileName") String fileName) throws FileNotFoundException { File file =

  • SpringBoot通过请求对象获取输入流无数据

    目录 请求对象获取输入流无数据问题 方案一:禁用默认的过滤器 方案二:使用@RequestBody注解 方案三:自定义HiddenHttpMethodFilter过滤器 request输入流重复可读 自定义类继承 HttpServletRequestWrapper 定义一个过滤器 Filter 创建过滤器配置类 FilterConfig 请求对象获取输入流无数据问题 昨天下午在开发的时候遇到了奇怪的事情,在SpringBoot的Controller里面直接使用HttpServletRequest

  • springboot如何获取文件流

    目录 springboot获取文件流 前端获取springboot返回的文件流的踩坑 踩过坑的我给您提供一个答案 两种解决方案 springboot获取文件流 在日常开发中,经常会获取项目的相对路径用以获取存放在项目路径下的资源,如获取static/ss.txt 在spring项目中,  可以用request.getRealPath("/")获取项目路径然后拼接起来,再生成流: //拼接地址 String downLoadUrl = request.getRealPath("

  • Springboot如何通过流返回文件

    目录 如何通过流返回文件 controller类如下 工具类DownLoadUtils如下 以流的方式直接返回 如何通过流返回文件 本人的文件是放在resource/templates目录下,截图如下 controller类如下 @GetMapping(value = "/downfile") public void download(HttpServletResponse response) throws IOException { String fileName = "t

  • vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)

    vue-cli+axios实现附件上传下载记录: 上传: 这里用formData格式传递参数:请求成功后后台返回上传文件的对应信息. 重点是下载: ############## downloadfile(res) { var blob = new Blob([res.data], {type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=utf-8'}); //applicati

  • SpringBoot 导出数据生成excel文件返回方式

    一.基于框架 1.IDE IntelliJ IDEA 2.软件环境 Spring boot mysql mybatis org.apache.poi 二.环境集成 1.创建spring boot项目工程 略过 2.maven引入poi <!--数据导出依赖 excel--> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apac

  • vue后台返回格式为二进制流进行文件的下载方式

    目录 后台返回格式为二进制流进行文件的下载 结合项目中 具体文件使用 vue下载保存二进制文件 方法封装:util.js 请求接口 方法调用 后台返回格式为二进制流进行文件的下载 结合项目中 封装get请求携带token,进行接收二进制流 export function getHeader() {     const token = getToken();     if (token) {         return {             headers: {              

  • SpringBoot使用阿里OSS实现文件云存储的方法

    前言 我们在项目中经常会使用到图片或者文档资源,一般来说如何这类文件比较少的时候我们可以直接存在在服务器中,但是如果一旦这些文件到达一定数量的时候如果在放在应用服务器必然会影响应用服务器的性能,并且有时候这些图片资源也要直接用在前端显示当中,所以放在应用服务器也是不妥的.一些比较大的互联网公司可能会使用一些分布式文件系统来达到存储文件的目的,但这种方式门槛过高.如何找到一个合适且性价比高的文件存储方式呢?那么不得不说的就是对象存储服务OSS. FastDFS分布式文件系统可参考我的博客:Fast

  • SpringBoot+微信小程序实现文件上传与下载功能详解

    目录 1.文件上传 1.1 后端部分 1.2 小程序前端部分 1.3 实现效果 2.文件下载 2.1 后端部分 2.2 小程序前端部分 2.3 实现效果 1.文件上传 1.1 后端部分 1.1.1 引入Apache Commons FIleUpload组件依赖 <!--文件上传与下载相关的依赖--> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fil

  • java使用缓冲流复制文件的方法

    本文实例为大家分享了java使用缓冲流复制文件的具体代码,供大家参考,具体内容如下 [1] 程序设计 /*------------------------------- 1.缓冲流是一种处理流,用来加快节点流对文件操作的速度 2.BufferedInputStream:输入缓冲流 3.BufferedOutputStream:输出缓冲流 4.在正常的Java开发中都使用缓冲流来处理文件,因为这样可以提高文件处理的效率 5.这里设计程序:使用缓冲流复制一个较大的视频文件 -------------

  • Java使用I/O流读取文件内容的方法详解

    本文实例讲述了Java使用I/O流读取文件内容的方法.分享给大家供大家参考,具体如下: 要利用I/O流读取文件内容,首先要掌握InputStream的体系结构. 这个体系中FileInputStream和BufferedInputStream是一定要掌握的,因为使用的频率比较高. InputStream的方法:InputStream位于java.io包下 OutputStream的方法: 读取文件(代码): package com.jredu.oopch11; import java.io.Fi

  • Java使用FileInputStream流读取文件示例详解

    一.File流概念 JAVA中针对文件的读写操作设置了一系列的流,其中主要有FileInputStream,FileOutputStream,FileReader,FileWriter四种最为常用的流 二.FileInputStream 1)FileInputStream概念  FileInputStream流被称为文件字节输入流,意思指对文件数据以字节的形式进行读取操作如读取图片视频等 2)构造方法 2.1)通过打开与File类对象代表的实际文件的链接来创建FileInputStream流对象

随机推荐