FileManagerService.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. package cn.cslg.pas.service;
  2. import cn.cslg.pas.common.model.dto.FMSDeleteFileDTO;
  3. import com.google.gson.Gson;
  4. import lombok.RequiredArgsConstructor;
  5. import lombok.extern.slf4j.Slf4j;
  6. import okhttp3.*;
  7. import org.springframework.beans.factory.annotation.Value;
  8. import org.springframework.stereotype.Service;
  9. import org.springframework.util.FileCopyUtils;
  10. import org.springframework.web.multipart.MultipartFile;
  11. import java.io.File;
  12. import java.io.IOException;
  13. import java.util.ArrayList;
  14. import java.util.List;
  15. import java.util.Objects;
  16. import java.util.concurrent.TimeUnit;
  17. import static cn.hutool.core.io.FileUtil.getMimeType;
  18. /**
  19. * Okhttp调用FMS上传文件接口
  20. *
  21. * @Author xiexiang
  22. * @Date 2023/8/10
  23. */
  24. @RequiredArgsConstructor
  25. @Slf4j
  26. @Service
  27. public class FileManagerService {
  28. @Value("${authorUrl}")
  29. private String PCSUrl;
  30. @Value("${OPSUrl}")
  31. private String OPSUrl;
  32. @Value("${PASUrl}")
  33. private String PASUrl;
  34. @Value("${RMSUrl}")
  35. private String RMSUrl;
  36. @Value("${FMSUrl}")
  37. private String FMSUrl;
  38. public String uploadFile(List<MultipartFile> multipartFiles, Integer sourceId) throws IOException {
  39. List<File> files = new ArrayList<>();
  40. for (MultipartFile multipartFile : multipartFiles) {
  41. File file = new File(multipartFile.getOriginalFilename());
  42. FileCopyUtils.copy(multipartFile.getBytes(), file);
  43. files.add(file);
  44. }
  45. MultipartBody.Builder multipartBodyBuilder = new MultipartBody.Builder()
  46. .setType(MultipartBody.FORM);
  47. for (File file : files) {
  48. //根据文件名获取文件的MIME类型
  49. String mimeType = getMimeType(file.getPath());
  50. multipartBodyBuilder.addFormDataPart("files", file.getName(), RequestBody.create(MediaType.parse(mimeType), file));
  51. }
  52. RequestBody requestBody = multipartBodyBuilder
  53. .addFormDataPart("sourceId", String.valueOf(sourceId))
  54. .build();
  55. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  56. .connectTimeout(60, TimeUnit.SECONDS)
  57. .writeTimeout(60, TimeUnit.SECONDS)
  58. .readTimeout(60, TimeUnit.SECONDS)
  59. .build();
  60. Request request = new Request.Builder()
  61. .url(FMSUrl + "/fileManager/uploadSystemFile")
  62. .post(requestBody)
  63. .build();
  64. return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
  65. }
  66. /**
  67. * 调用文件系统取出文件接口(获得文件流)
  68. *
  69. * @param fieldId 文件id
  70. */
  71. public byte[] downloadSystemFileFromFMS(Integer fieldId) throws IOException {
  72. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  73. .connectTimeout(60, TimeUnit.SECONDS)
  74. .writeTimeout(60, TimeUnit.SECONDS)
  75. .readTimeout(60, TimeUnit.SECONDS)
  76. .build();
  77. Request request = new Request.Builder()
  78. .url(FMSUrl + "/fileManager/downloadSystemFile?fileId=" + fieldId)
  79. .get()
  80. .build();
  81. return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).bytes();
  82. }
  83. /**
  84. * 调用文件系统获取文件信息接口
  85. *
  86. * @return
  87. * @throws IOException
  88. */
  89. public String getSystemFileFromFMS(List<Integer> fileIds) throws IOException {
  90. String param = new Gson().toJson(fileIds);
  91. RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
  92. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  93. .connectTimeout(60, TimeUnit.SECONDS)
  94. .writeTimeout(60, TimeUnit.SECONDS)
  95. .readTimeout(60, TimeUnit.SECONDS)
  96. .build();
  97. Request request = new Request.Builder()
  98. .url(FMSUrl + "/fileManager/getFileData")
  99. .post(requestBody)
  100. .build();
  101. return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
  102. }
  103. /**
  104. * 调用文件系统删除接口
  105. *
  106. * @return
  107. * @throws IOException
  108. */
  109. public String deleteFileFromFMS(FMSDeleteFileDTO fmsDeleteFileDTO) throws IOException {
  110. String param = new Gson().toJson(fmsDeleteFileDTO);
  111. RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
  112. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  113. .connectTimeout(60, TimeUnit.SECONDS)
  114. .writeTimeout(60, TimeUnit.SECONDS)
  115. .readTimeout(60, TimeUnit.SECONDS)
  116. .build();
  117. Request request = new Request.Builder()
  118. .url(FMSUrl + "/fileManager/deleteSystemFile")
  119. .post(requestBody)
  120. .build();
  121. return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
  122. }
  123. }