移动端预览指定链接的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()));
}
相关推荐
历程里程碑1 分钟前
滑动窗口---- 无重复字符的最长子串
java·数据结构·c++·python·算法·leetcode·django
qq_2290580121 分钟前
docker中检测进程的内存使用量
java·docker·容器
我真的是大笨蛋34 分钟前
InnoDB行级锁解析
java·数据库·sql·mysql·性能优化·数据库开发
钦拆大仁37 分钟前
Java设计模式-单例模式
java·单例模式·设计模式
小手cool1 小时前
在保持数组中对应元素(包括负数和正数)各自组内顺序不变的情况下,交换数组中对应的负数和正数元素
java
笨手笨脚の1 小时前
深入理解 Java 虚拟机-04 垃圾收集器
java·jvm·垃圾收集器·垃圾回收
skywalker_111 小时前
Java中异常
java·开发语言·异常
没有天赋那就反复1 小时前
JAVA 静态方法
java·开发语言
Java天梯之路2 小时前
Spring Boot 钩子全集实战(七):BeanFactoryPostProcessor详解
java·spring boot·后端
wr2005142 小时前
第二次作业,渗透
java·后端·spring