Springmvc实现文件下载2种实现方法

 更新时间:2020年03月07日 14:02:26   作者:程序晓猿  
这篇文章主要介绍了Springmvc实现文件下载2种实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

使用springmvc实现文件下载有两种方式,都需要设置response的Content-Disposition为attachment;filename=test2.png

第一种可以直接向response的输出流中写入对应的文件流

第二种可以使用 ResponseEntity<byte[]>来向前端返回文件

一、使用response

@RestController
@RequestMapping("/download")
public class DownloadController {

  @RequestMapping("/d1")
  public ResultVo<String> downloadFile(HttpServletResponse response){

    String fileName="test.png";
    try {
      //获取页面输出流
      ServletOutputStream outputStream = response.getOutputStream();
      //读取文件
      byte[] bytes = FileUtils.readFileToByteArray(new File("D:\\my-study\\test2.png"));
      //向输出流写文件
      //写之前设置响应流以附件的形式打开返回值,这样可以保证前边打开文件出错时异常可以返回给前台
      response.setHeader("Content-Disposition","attachment;filename="+fileName);
      outputStream.write(bytes);
      outputStream.flush();
      outputStream.close();
      return ResultVoUtil.success("success");
    } catch (IOException e) {
      return ResultVoUtil.error(e);
    }

  }
}

推荐使用这种方式,这种方式可以以json形式给前台返回提示信息。

二、使用ResponseEntity

@Controller
@RequestMapping("/download2")
public class DownloadController2 {

  private final static Logger logger= LoggerFactory.getLogger(CategoryDataController.class);


  @GetMapping("/d2")
  public ResponseEntity<byte[]> download2(){
    //获取文件对象
    try {
      byte[] bytes = FileUtils.readFileToByteArray(new File("D:\\my-study\\bill-admin\\test2.png"));
      HttpHeaders headers=new HttpHeaders();
      headers.set("Content-Disposition","attachment;filename=test2.png");
      ResponseEntity<byte[]> entity=new ResponseEntity<>(bytes,headers,HttpStatus.OK);
      return entity;
    } catch (IOException e) {
      logger.error("下载出错:",e);
      return null;
    }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java详细解析下拉菜单和弹出菜单的使用

    Java详细解析下拉菜单和弹出菜单的使用

    这篇文章主要介绍了怎么用Java来创建和使用下拉菜单和弹出菜单,下拉菜单和弹出菜单是我们经常要用的工具,但是你有想过自己怎么去实现它吗,感兴趣的朋友跟随文章往下看看吧
    2022-04-04
  • Java实现联系人管理系统

    Java实现联系人管理系统

    这篇文章主要为大家详细介绍了Java实现联系人管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 秒懂Kotlin之Java工程师快速掌握Kotlin的技巧

    秒懂Kotlin之Java工程师快速掌握Kotlin的技巧

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。这篇文章主要介绍了秒懂Kotlin之Java工程师快速掌握Kotlin的技巧,需要的朋友可以参考下
    2021-09-09
  • MyBatis中insert操作返回主键的实现方法

    MyBatis中insert操作返回主键的实现方法

    在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数。这篇文章主要介绍了MyBatis中insert操作返回主键的方法,需要的朋友可以参考下
    2016-09-09
  • Java NumberFormat 类的详解及实例

    Java NumberFormat 类的详解及实例

    这篇文章主要介绍了Java NumberFormat 类的详解及实例的相关资料,数字格式化类按照本地风格习惯进行的数字显示,需要的朋友可以参考下
    2017-08-08
  • 详述 DB2 分页查询及 Java 实现的示例

    详述 DB2 分页查询及 Java 实现的示例

    本篇文章主要介绍了详述 DB2 分页查询及 Java 实现的示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • 使用SpringBoot根据配置注入接口的不同实现类(代码演示)

    使用SpringBoot根据配置注入接口的不同实现类(代码演示)

    使用springboot开发时经常用到@Autowired和@Resource进行依赖注入,但是当我们一个接口对应多个不同的实现类的时候如果不进行一下配置项目启动时就会报错,那么怎么根据不同的需求注入不同的类型呢,感兴趣的朋友一起看看吧
    2022-06-06
  • Java一致性Hash算法的实现详解

    Java一致性Hash算法的实现详解

    这篇文章主要介绍了Java一致性Hash算法的实现详解,hash的意思是散列,目的将一组输入的数据均匀的分开、打散,往往用来配合路由算法做负载均衡,多用在分布式系统中,需要的朋友可以参考下
    2024-01-01
  • 带你了解Java数据结构和算法之栈

    带你了解Java数据结构和算法之栈

    这篇文章主要为大家介绍了Java数据结构和算法之栈 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • java 数组转list的两种方式

    java 数组转list的两种方式

    这篇文章主要介绍了java 数组转list的两种方式,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-10-10

最新评论