移动端预览指定链接的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()));
}
相关推荐
tmacfrank1 分钟前
Java 原生网络编程(BIO | NIO | Reactor 模式)
java·开发语言·网络
python算法(魔法师版)2 分钟前
.NET NativeAOT 指南
java·大数据·linux·jvm·.net
专注VB编程开发20年4 分钟前
VB.NET关于接口实现与简化设计的分析,封装其他类
java·前端·数据库
大数据魔法师27 分钟前
Redis(三) - 使用Java操作Redis详解
java·数据库·redis
天天爱吃肉821836 分钟前
车载以太网驱动智能化:域控架构设计与开发实践
java·运维·网络协议·微服务
IT光38 分钟前
Redis 五种类型基础操作(redis-cli + Spring Data Redis)
java·数据库·redis·spring·缓存
keke1038 分钟前
Java【14_3】接口(Comparable和Comparator)、内部类-示例
java·开发语言·servlet
代码不停1 小时前
Java二叉树题目练习
java·开发语言·数据结构
MaCa .BaKa1 小时前
38-日语学习小程序
java·vue.js·spring boot·学习·mysql·小程序·maven
贺函不是涵1 小时前
【沉浸式求职学习day41】【Servlet】
java·学习·servlet·maven