移动端预览指定链接的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()));
}
相关推荐
非ban必选2 分钟前
spring-ai-alibaba官方 Playground 示例
java·人工智能·spring
一粒沙白猫4 分钟前
Java综合练习04
java·开发语言·算法
凌辰揽月12 分钟前
8分钟讲完 Tomcat架构及工作原理
java·架构·tomcat
笑醉踏歌行18 分钟前
idea应用代码配色网站
java·ide·intellij-idea
一入JAVA毁终身20 分钟前
处理Lombok的一个小BUG
java·开发语言·bug
gjh120832 分钟前
Easy-excel监听器中对批量上传的工单做错误收集
java·spring boot
红衣女妖仙35 分钟前
JXLS 库导出复杂 Excel
java·excel·jxls·java 导出 excel
Hellyc42 分钟前
JAVA八股文:异常有哪些种类,可以举几个例子吗?Throwable类有哪些常见方法?
java·开发语言
要开心吖ZSH43 分钟前
《Spring 中上下文传递的那些事儿》Part 2:Web 请求上下文 —— RequestContextHolder 与异步处理
java·spring
西岭千秋雪_1 小时前
Redis缓存架构实战
java·redis·笔记·学习·缓存·架构