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

场景

直接展示外部系统返回的获取文件流时出现了跨域问题:
在这里插入图片描述

解决办法

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

在这里插入图片描述

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

/** 获取传入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()));
}

猜你喜欢

转载自blog.csdn.net/ZHAI_KE/article/details/132279186