Java返回文件时为图片或pdf等设置在线预览或下载功能

 更新时间:2024年01月16日 09:38:20   作者:菜鸟程序猿、  
这篇文章主要介绍了Java返回文件时为图片或pdf等设置在线预览或下载功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

设置Content-Disposition响应头类型

"inline"查看预览 ; "attachment"下载;

inline:表示回复中的消息体会以页面的一部分或者整个页面的形式展示
attchment:以附件形式被下载到本地;

/**
 * 文件或图片预览/下载工具类
 * @author zh、
 * @data 2024/1/11 18:35
 */
@Component
@Slf4j
public class FileHttpUtil {
    /**
     * 根据物理路径文件 获取 下载/预览 文件
     * @param file 文件
     * @param type 设置响应头类型 "inline"查看  "attachment"下载
     * @param fileName 文件名 
     * @return 对应类型响应文件
     */
    public static ResponseEntity<?> getResponseEntity(byte[] file , String type , String fileName ){
        ResponseEntity.BodyBuilder responseEntity = ResponseEntity.ok();
        HttpHeaders httpHeaders = new HttpHeaders();
        Tika tika = new Tika();
        String mediaType = tika.detect(file);
        httpHeaders.setContentType(MediaType.parseMediaType(mediaType));
        httpHeaders.setContentDisposition(ContentDisposition.builder(type)
                .filename(URLEncoder.encode(fileName )).build());
        httpHeaders.setCacheControl(CacheControl.noCache());
        //httpHeaders.setCacheControl(CacheControl.maxAge(10, TimeUnit.MINUTES));
        return responseEntity.headers(httpHeaders).body(file );
    }
需要的pom依赖文件
	<dependency>
      <groupId>org.apache.tika</groupId>
      <artifactId>tika-core</artifactId>
      <version>1.28.4</version>
    </dependency>

接口调用或测试

  /**
     * 查询文件
     * @param filePath文件地址 物理路径
     * @param type 设置响应头类型  "inline"查看  "attachment"下载
     * @return 响应文件
     * @throws IOException
     */
    @GetMapping(value = "/file")
    public ResponseEntity<?> file(String filePath,String type){
   		 //根据文件路径去文件服务获取文件
        File file = new File(filePath);
        try (FileInputStream fileInputStream = new FileInputStream(file)) {
            byte[] buf = new byte[fileInputStream.available()];
            fileInputStream.read(buf);
            return FileHttpUtil.getResponseEntity(buf, type,file .getName());
        } catch (IOException e) {
             e.printStackTrace();
        }
    }

到此这篇关于Java返回文件时为图片或pdf等设置在线预览或下载的文章就介绍到这了,更多相关java pdf在线预览或下载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • idea 使用Maven Helper idea的解决方法

    idea 使用Maven Helper idea的解决方法

    这篇文章主要介绍了idea 使用Maven Helper idea的解决方法,本文给大家介绍的非常详细对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • SpringMVC通过Ajax处理Json数据的步骤详解

    SpringMVC通过Ajax处理Json数据的步骤详解

    这篇文章主要介绍了SpringMVC通过Ajax处理Json数据的步骤详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Java类和成员上的一些方法实例代码

    Java类和成员上的一些方法实例代码

    这篇文章主要介绍了Java类和成员上的一些方法实例代码,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Java手写简易版HashMap的使用(存储+查找)

    Java手写简易版HashMap的使用(存储+查找)

    这篇文章主要介绍了Java手写简易版HashMap的使用(存储+查找),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • springboot如何读取自定义属性

    springboot如何读取自定义属性

    大家好,本篇文章主要讲的是springboot如何读取自定义属性,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • 工厂方法模式_动力节点Java学院整理

    工厂方法模式_动力节点Java学院整理

    这篇文章主要介绍了工厂方法模式_动力节点Java学院整理的相关资料,需要的朋友可以参考下
    2017-08-08
  • Java函数习惯用法详解

    Java函数习惯用法详解

    本篇文章主要给大家总结了java中最常用的函数的用法和写法,需要的朋友参考一下吧。
    2017-12-12
  • Java设计模式--代理模式

    Java设计模式--代理模式

    代理就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之前起到中介的作用
    2021-07-07
  • 详解MyBatisPlus逻辑删除与唯一索引冲突问题

    详解MyBatisPlus逻辑删除与唯一索引冲突问题

    这篇文章主要介绍了详解MyBatisPlus逻辑删除与唯一索引冲突问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Java枚举类与注解,新手一篇搞定它

    Java枚举类与注解,新手一篇搞定它

    枚举类型是Java 5新增的特性,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示。由于Java 不支持多继承,所以枚举对象不能再继承其他类(可以实现接口)
    2021-06-06

最新评论