本文主要是介绍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等设置在线预览或下载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!