FileManagerService.java 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. package com.example.xiaoshiweixinback.service.common;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.example.xiaoshiweixinback.entity.dto.common.FMSDeleteFileDTO;
  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(60000, TimeUnit.SECONDS)
  88. .writeTimeout(60000, TimeUnit.SECONDS)
  89. .readTimeout(60000, 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. public String uploadFileWithGuid(File file, String guid) throws IOException {
  139. MultipartBody.Builder multipartBodyBuilder = new MultipartBody.Builder()
  140. .setType(MultipartBody.FORM);
  141. //根据文件名获取文件的MIME类型
  142. String mimeType = getMimeType(file.getPath());
  143. multipartBodyBuilder.addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse(mimeType), file));
  144. RequestBody requestBody = multipartBodyBuilder
  145. .addFormDataPart("sourceId", String.valueOf(FileSource))
  146. .addFormDataPart("fileGuid", guid)
  147. .build();
  148. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  149. .connectTimeout(60, TimeUnit.SECONDS)
  150. .writeTimeout(60, TimeUnit.SECONDS)
  151. .readTimeout(60, TimeUnit.SECONDS)
  152. .build();
  153. Request request = new Request.Builder()
  154. .url(FMSUrl + "/fileManager/replaceFile")
  155. .post(requestBody)
  156. .build();
  157. Response response = null;
  158. response = okHttpClient.newCall(request).execute();
  159. // 最后记得删除临时文件
  160. return Objects.requireNonNull(response.body()).string();
  161. }
  162. /**
  163. * 调用文件系统上传文件接口
  164. */
  165. public String uploadFile2(List<File> files) throws IOException {
  166. MultipartBody.Builder multipartBodyBuilder = new MultipartBody.Builder()
  167. .setType(MultipartBody.FORM);
  168. for (File file : files) {
  169. //根据文件名获取文件的MIME类型
  170. String mimeType = getMimeType(file.getPath());
  171. multipartBodyBuilder.addFormDataPart("files", file.getName(), RequestBody.create(MediaType.parse(mimeType), file));
  172. }
  173. RequestBody requestBody = multipartBodyBuilder
  174. .addFormDataPart("sourceId", String.valueOf(FileSource))
  175. .build();
  176. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  177. .connectTimeout(60, TimeUnit.SECONDS)
  178. .writeTimeout(60, TimeUnit.SECONDS)
  179. .readTimeout(60, TimeUnit.SECONDS)
  180. .build();
  181. Request request = new Request.Builder()
  182. .url(FMSUrl + "/fileManager/uploadNormalFile")
  183. .post(requestBody)
  184. .build();
  185. Response response = null;
  186. response = okHttpClient.newCall(request).execute();
  187. // 最后记得删除临时文件
  188. for (File file : files) {
  189. FileUtils.deleteQuietly(file);
  190. }
  191. return Objects.requireNonNull(response.body()).string();
  192. }
  193. public List<String> uploadFileGetGuid2(List<File> files) throws IOException {
  194. String res = this.uploadFile2(files);
  195. JSONObject jsonObject = JSONObject.parseObject(res);
  196. List<String> guids = JSONArray.parseArray(jsonObject.get("data").toString(), String.class);
  197. return guids;
  198. }
  199. /**
  200. * 调用文件系统获得专利图片的guid
  201. *
  202. * @param appNo 申请号
  203. */
  204. public String getPatentPictureGuids(String appNo) throws IOException {
  205. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  206. .connectTimeout(60, TimeUnit.SECONDS)
  207. .writeTimeout(60, TimeUnit.SECONDS)
  208. .readTimeout(60, TimeUnit.SECONDS)
  209. .build();
  210. Request request = new Request.Builder()
  211. .url(FMSUrl + "/fileManager/getPatentPictureGuids?appNo=" + appNo)
  212. .get()
  213. .build();
  214. return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
  215. }
  216. }