当前位置: 首页 > news >正文

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();
        }
    }

相关文章:

  • sqlalchemy 事务自动控制(类java aop)
  • 【蓝桥杯/DFS】分考场 (Java)
  • SwiftUI之深入解析Alignment Guides的超实用实战教程
  • 漏洞修复整理
  • WaitForSingleObject 函数的诸多用途与使用场景总结
  • SCI一区级 | Matlab实现RIME-CNN-LSTM-Mutilhead-Attention多变量多步时序预测
  • 保存数据到文本文件或 CSV 文件的示例
  • 并发编程的12条规范
  • [Docker] Docker为什么出现
  • k8s operator从0到1实践
  • 静态网页设计——个人图书馆(HTML+CSS+JavaScript)(dw、sublime Text、webstorm、HBuilder X)
  • 设计模式-委托模式
  • Eva.js是什么(互动小游戏开发)
  • DC电源模块与AC电源模块的对比分析
  • 深入理解 Flink(七)Flink Slot 管理详解
  • 懒得玩游戏--帮我做数独
  • 【纯CSS特效源码】(二)精美的立体字
  • 结构化数据,非结构化数据,半结构化数据(AI问答)
  • 嵌入式培训机构四个月实训课程笔记(完整版)-C++和QT编程第一天-C++概述和基础(物联技术666)
  • vulkan中的指令队列的大致原理
  • 四川甘孜炉霍县觉日寺管委会主任呷玛降泽被查
  • 商务部:中方敦促美方尽快停止232关税措施
  • 香港特区立法会通过条例草案便利外地公司迁册来港
  • 夜读丨读《汉书》一得
  • 台行政机构网站删除“汉人”改为“其余人口”,国台办回应
  • 北洋“修约外交”的台前幕后——民国条约研究会档案探研