文件下载只需要四步:

1.设置文件ContentType类型

response.setContentType("multipart/form-data");

2.设置文件头

response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));

3.通过response获取ServletOutputStream对象(out)

InputStream inputStream = xxxxx.downloadFile(fileName);

4.写到输出流(out)中

IOUtils.copy(inputStream, response.getOutputStream());
inputStream.close();

下面给出代码块,亲测可执行:

1.基于OSS实现文件下载

    @RequestMapping(value = "/ossDown",method = RequestMethod.GET)@ResponseBody@SneakyThrowspublic void ossDown(@RequestParam("bucketName") String bucketName,@RequestParam("fileName") String fileName, HttpServletResponse response){response.setContentType("multipart/form-data");response.setHeader("Content-Disposition", "attachment;filename=" +URLEncoder.encode(fileName, "UTF-8"));InputStream inputStream = ossComponent.downloadFile(bucketName, fileName);IOUtils.copy(inputStream, response.getOutputStream());inputStream.close();}

OSS执行组件部分,亲测可行,获取直达地址

2.基于minIO实现文件下载

/*** 下载文件* @param fileName* @param response* @throws Exception*/@RequestMapping(value = "/minioDown",method = RequestMethod.GET)@ResponseBody@SneakyThrows(Exception.class)public void minioDown(@RequestParam("fileName") String fileName, HttpServletResponse response)throws Exception {ObjectStat stat = minioUtils.statObject("peach", fileName);response.setContentType(stat.contentType());response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));InputStream in = minioUtils.getObject("", fileName);IOUtils.copy(in, response.getOutputStream());in.close();}

关于minio的Java操作部分,点击直达,亲测可行,可直接项目使用,也可学习

Java中实现文件下载通用方式相关推荐

  1. JS 和 Java 中URL特殊字符编码方式

    前几天遇到url特殊字符编码的问题,在这里整理一下: JavaScript 1.  编码 escape(String) 其中某些字符被替换成了十六进制的转义序列. 解码 unescape(String ...

  2. opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类

    opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类 参考文章: (1)opengl中的Floatbuffer和 ...

  3. java中的异常处理代码,java_深入剖析Java中的各种异常处理方式,1. 调试追踪代码:public s - phpStudy...

    深入剖析Java中的各种异常处理方式 1. 调试追踪代码: public static void enterTryMethod() { System.out.println("enter a ...

  4. java数组初始化的方式,java中初始化数组的方式有几种

    java中初始化数组的方式有几种 发布时间:2020-06-01 16:12:45 来源:亿速云 阅读:153 作者:鸽子 三种初始化方式: 1.静态初始化:创建+赋值 2.动态初始化:先创建再赋值 ...

  5. java中常见跳出循环的方式总结

    java中常见跳出循环的方式一般有两种,一种是常用的break,continue,return方式:另一种是循环标记的方式. 方式一:break,continue,return方式 案例: break ...

  6. 关于Java中的Map遍历方式比较

    最近在看阿里巴巴最新版的Java开发手册,里面的内容还是很值得去阅读学习,下面是我对Java中Map的遍历方式的比较和总结: 第一种:使用entrySet()的形式来遍历,也是效率高,推荐使用的一种遍 ...

  7. java中的Map遍历方式总结

    java中的Map遍历方式总结 import java.util.HashMap; import java.util.Iterator; import java.util.Map;public cla ...

  8. java中的多线程使用方式

    文章目录 1 场景 2 直接创建线程 2.1 Thread创建线程 2.2 Runnable创建线程 2.3 Callable创建线程 3 自定义线程池 3.1 关于线程池 3.1 工具类创建 3.2 ...

  9. java 中线程的创建方式

    如果说在java中创建线程的有几种方式的话,归根结底我认为就两种方式 1.继承Thread类,重写run方法 继承Thread类,如下图重写了run()方法 通过start()方法来启动线程 最后的输 ...

最新文章

  1. git的简单使用(一些小操作,持续更新)
  2. what should you do at the new arrival of the place
  3. 计算机图形学应用场景,计算机图形学: 应用Java 2D和3D
  4. atlas怎么看日志_亿级的日志治理!微服务最佳方案,ELK stack从零搭建
  5. MaxCompute Spark 资源使用优化祥解
  6. 对团队成员公开感谢博客
  7. verilog赋多位值_Verilog入门学习笔记——第一弹
  8. linux 文件夹换用户组,Linux-用户管理和用户组管理
  9. 全国计算机等级考试题photoshop,全国计算机等级考试之一级Photoshop试题
  10. 2019如何新建流程图_如何用ppt制作海报和流程图
  11. python连接sap接口_python 连接SAP的方法
  12. vue-echarts教程
  13. 【python】chardet函数用法
  14. 助教日志—请沈航13级同学将GIT地址和CNBLOG地址发到这篇博文的评论中
  15. cad详图怎么画_CAD的图框应该怎么画? - CAD自学网
  16. 序列号生成-模拟windows office序列号
  17. java公路赛_为什么Java公路车总被黑?
  18. Android5.1浏览器证书问题
  19. 【在线电子书转换】云展网教程 | 如何设置电子书的翻页速度?
  20. 运用python简单的画圆

热门文章

  1. 漫画:5 分钟学会红黑树算法!
  2. MySql之MySql导出表结构
  3. Java并发基础理论
  4. 使用iphone的remote io unit来录音和放音.
  5. 雷霆战机装备最强推荐搭配
  6. cocoaPods安装详解
  7. SpringBoot工程的pom报错问题解决
  8. Unity 遍历子物体
  9. python基础之列表的遍历
  10. 1、go的GOPATH、GOROOT、第三方库学习