Java返回文件时为图片或pdf等设置在线预览或下载功能
作者:菜鸟程序猿、
这篇文章主要介绍了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在线预览或下载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
