FileManagerService.java 5.6 KB

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