SpringBoot实现数据下资源的永久地址
目的:实现数据下资源的永久地址,无论这条数据下文件资源被替换成何种文件,但是预览地址始终不变
/**
* 预览或下载文件
* @param id 资源id
* @return 文件
*/
@GetMapping("/preview/{id}")
public ResponseEntity<org.springframework.core.io.Resource> preview(@PathVariable("id") Long id) {
LayoutResource layoutResource = layoutResourceService.getById(id);
if(ObjectUtil.isEmpty(layoutResource)){
throw new ServiceException("资源不存在");
}
SysOssVo sysOssVo = sysOssService.getById(layoutResource.getOssId());
String contentType = getContentType(sysOssVo.getUrl());
InputStream inputStream = sysOssService.getObjectContent(layoutResource.getOssId());
boolean hasImage = isImage(sysOssVo.getFileName());
if (contentType == null) {
contentType = "application/octet-stream";
}
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, hasImage ? "inline" : "attachment; filename=\""
+ java.net.URLEncoder.encode(sysOssVo.getOriginalName(),StandardCharsets.UTF_8) + "\"")
.contentType(MediaType.parseMediaType(contentType))
.body(new InputStreamResource(inputStream));
}/**
* 获取文件类型
* @param urlString URL地址
* @return 文件类型
*/
private String getContentType(String urlString){
String contentType = null;
try {
URL url = new URL(urlString);
URLConnection connection = url.openConnection();
connection.setUseCaches(false);
connection.connect();
contentType = connection.getContentType();
} catch (Exception e) {
e.printStackTrace();
}
return contentType;
}
1 条评论
《华纳圣淘沙公司开户流程全解析》→ 官方顾问一对一指导??? 安全联系:183第三段8890第四段9465
《华纳圣淘沙开户步骤详解》→ 」专属通道快速办理??? 安全联系:183第三段8890第四段9465
《华纳圣淘沙账户注册指南》→ 扫码获取完整资料清单?「微?? 安全联系:183第三段8890第四段9465
《新手开通华纳圣淘沙公司账户指南》→ 限时免费咨询开放??? 安全联系:183第三段8890第四段9465
《华纳圣淘沙企业开户标准流程》→ 资深顾问实时解答疑问??? 安全联系:183第三段8890第四段9465
《华纳圣淘沙开户步骤全景图》→ 点击获取极速开户方案??? 安全联系:183第三段8890第四段9465
《华纳圣淘沙账户创建全流程手册》→ 预约顾问免排队服务?9?? 安全联系:183第三段8890第四段9465 《从零开通华纳圣淘沙公司账户》→ 添加客服领取开户工具包?? 安全联系:183第三段8890第四段9465
《官方授权:华纳圣淘沙开户流程》→ 认证顾问全程代办?」?? 安全联系:183第三段8890第四段9465
《华纳圣淘沙开户说明书》→立即联系获取电子版文件??? 安全联系:183第三段8890第四段9465