移动端预览指定链接的pdf文件流

场景

直接展示外部系统返回的获取文件流时出现了跨域问题:

解决办法

1. 外部系统返回的请求头中调整(但是其他系统不会给你改的)

2. 我们系统后台获取文件流并转为新的文件流提供给前端

java 复制代码
/** 获取传入url文件流 */
@GetMapping("/getFileStream")
public ResponseEntity<org.springframework.core.io.Resource> getFileStream(
    @RequestParam("url") String url,
    @RequestParam(value = "download", required = false) boolean download)
    throws UnsupportedEncodingException, BusinessException {
  // 返回流
  ByteArrayOutputStream outputStream = OkHttpClientUtil.get(url);
  if (null == outputStream) {
    throw new BusinessException("文件流为空", ServiceResponseStatus.SERVICE_ERROR);
  }
  String baseName = FilenameUtils.getBaseName(url);
  String extension = FilenameUtils.getExtension(url);
  String filename =
      URLEncoder.encode(baseName, "UTF-8") + FilenameUtils.EXTENSION_SEPARATOR + extension;
  MediaType mediaType = MediaType.APPLICATION_OCTET_STREAM;
  if (FxCommFileType.PDF.getSuffix().toLowerCase().equals(extension)) {
    mediaType = MediaType.APPLICATION_PDF;
  }
  StringBuilder headerValues = new StringBuilder();
  if (download) {
    headerValues.append("attachment;");
  }
  headerValues.append("filename=").append(filename);
  return ResponseEntity.ok()
      .contentType(mediaType)
      .header(HttpHeaders.CONTENT_DISPOSITION, headerValues.toString())
      .body(new ByteArrayResource(outputStream.toByteArray()));
}
相关推荐
奋进的芋圆43 分钟前
Java 延时任务实现方案详解(适用于 Spring Boot 3)
java·spring boot·redis·rabbitmq
sxlishaobin1 小时前
设计模式之桥接模式
java·设计模式·桥接模式
model20051 小时前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
荒诞硬汉1 小时前
JavaBean相关补充
java·开发语言
提笔忘字的帝国2 小时前
【教程】macOS 如何完全卸载 Java 开发环境
java·开发语言·macos
2501_941882482 小时前
从灰度发布到流量切分的互联网工程语法控制与多语言实现实践思路随笔分享
java·开发语言
華勳全栈2 小时前
两天开发完成智能体平台
java·spring·go
alonewolf_992 小时前
Spring MVC重点功能底层源码深度解析
java·spring·mvc
沛沛老爹2 小时前
Java泛型擦除:原理、实践与应对策略
java·开发语言·人工智能·企业开发·发展趋势·技术原理
专注_每天进步一点点2 小时前
【java开发】写接口文档的札记
java·开发语言