指定したリンクの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()));
}

Supongo que te gusta

Origin blog.csdn.net/ZHAI_KE/article/details/132279186
Recomendado
Clasificación