MinioServiceImpl.java 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package com.nokia.service.file;
  2. import com.nokia.common.exception.MyRuntimeException;
  3. import com.nokia.config.MinioConfig;
  4. import io.minio.GetPresignedObjectUrlArgs;
  5. import io.minio.MinioClient;
  6. import io.minio.ObjectWriteResponse;
  7. import io.minio.PutObjectArgs;
  8. import io.minio.errors.*;
  9. import io.minio.http.Method;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.springframework.context.annotation.Primary;
  12. import org.springframework.stereotype.Service;
  13. import org.springframework.util.StringUtils;
  14. import java.io.IOException;
  15. import java.io.InputStream;
  16. import java.security.InvalidKeyException;
  17. import java.security.NoSuchAlgorithmException;
  18. import java.util.HashMap;
  19. import java.util.Map;
  20. import java.util.concurrent.TimeUnit;
  21. @Primary
  22. @Slf4j
  23. @Service
  24. public class MinioServiceImpl implements FileService {
  25. private final MinioClient minioClient;
  26. private final MinioConfig minioConfig;
  27. public MinioServiceImpl(MinioClient minioClient, MinioConfig minioConfig) {
  28. this.minioClient = minioClient;
  29. this.minioConfig = minioConfig;
  30. }
  31. /**
  32. * 获取下载地址
  33. *
  34. * @param object 对象名称
  35. * @return {@link String}
  36. */
  37. @Override
  38. public String getDownloadUrl(String object) {
  39. return getDownloadUrl(object, minioConfig.getExpiry(), TimeUnit.MINUTES);
  40. }
  41. /**
  42. * 获取下载地址
  43. *
  44. * @param object 对象名称
  45. * @param duration 过期时间
  46. * @param unit 单位
  47. * @return {@link String}
  48. */
  49. @Override
  50. public String getDownloadUrl(String object, int duration, TimeUnit unit) {
  51. try {
  52. return StringUtils.delete(minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
  53. .expiry(duration, unit)
  54. .bucket(minioConfig.getBucket())
  55. .object(object)
  56. .method(Method.GET)
  57. .build()), minioConfig.getEndpoint());
  58. } catch (ErrorResponseException | InsufficientDataException | InternalException | InvalidKeyException
  59. | InvalidResponseException | IOException | NoSuchAlgorithmException | XmlParserException
  60. | ServerException e) {
  61. throw new MyRuntimeException(e);
  62. }
  63. }
  64. /**
  65. * 从流中上传数据到对象
  66. *
  67. * @param object 对象名称
  68. * @param stream 流
  69. * @param objectSize 对象大小
  70. * @return {@link Map}<{@link String}, {@link Object}>
  71. */
  72. @Override
  73. public Map<String, Object> putObject(String object, InputStream stream, long objectSize, Map<String, String> tags) {
  74. try {
  75. ObjectWriteResponse response = minioClient.putObject(PutObjectArgs.builder()
  76. .bucket(minioConfig.getBucket())
  77. .object(object)
  78. .stream(stream, objectSize, -1)
  79. .tags(tags)
  80. .build());
  81. Map<String, Object> map = new HashMap<>();
  82. map.put("object", response.object());
  83. map.put("bucket", response.bucket());
  84. map.put("etag", response.etag());
  85. map.put("versionId", response.versionId());
  86. map.put("headers", response.headers());
  87. map.put("region", response.region());
  88. return map;
  89. } catch (ErrorResponseException | InsufficientDataException | InternalException | InvalidKeyException
  90. | InvalidResponseException | IOException | NoSuchAlgorithmException | ServerException
  91. | XmlParserException e) {
  92. throw new MyRuntimeException(e);
  93. }
  94. }
  95. /**
  96. * 获取存储桶名称
  97. *
  98. * @return {@link String}
  99. */
  100. @Override
  101. public String getBucket() {
  102. return minioConfig.getBucket();
  103. }
  104. }