OssUtils.java 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package nju.seec.helper.util;
  2. import com.aliyun.oss.ClientException;
  3. import com.aliyun.oss.OSS;
  4. import com.aliyun.oss.OSSClientBuilder;
  5. import com.aliyun.oss.OSSException;
  6. import com.aliyun.oss.model.PutObjectRequest;
  7. import lombok.Data;
  8. import lombok.extern.slf4j.Slf4j;
  9. import nju.seec.helper.enums.ExceptionType;
  10. import nju.seec.helper.exception.HelperException;
  11. import nju.seec.helper.util.cache.CaffeineCacheUtils;
  12. import org.springframework.boot.context.properties.ConfigurationProperties;
  13. import org.springframework.scheduling.annotation.Async;
  14. import org.springframework.stereotype.Component;
  15. import java.io.InputStream;
  16. import java.net.URL;
  17. import java.util.Date;
  18. /**
  19. * use oss
  20. *
  21. * @author cst
  22. */
  23. @Slf4j
  24. @Component
  25. @Data
  26. @ConfigurationProperties("aliyun.oss")
  27. public class OssUtils {
  28. private String endpoint;
  29. private String accessKeyId;
  30. private String accessKeySecret;
  31. private String bucketName;
  32. private long objectUrlLivingSeconds;
  33. private String objectUrlCacheName;
  34. private final CaffeineCacheUtils cacheUtils;
  35. public void upload(String objectName, InputStream inputStream) {
  36. OSS ossClient = getOss();
  37. PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
  38. try {
  39. ossClient.putObject(putObjectRequest);
  40. } catch (OSSException | ClientException e) {
  41. log.error(e.getMessage());
  42. throw HelperException.of(ExceptionType.ERROR, "文件上传失败");
  43. } finally {
  44. if (ossClient != null) {
  45. ossClient.shutdown();
  46. }
  47. }
  48. }
  49. public String getUrl(String objectName) {
  50. String cacheUrl = (String) cacheUtils.get(objectUrlCacheName, objectName);
  51. if (cacheUrl != null) {
  52. return cacheUrl;
  53. }
  54. OSS ossClient = getOss();
  55. Date expiration = new Date(System.currentTimeMillis() + objectUrlLivingSeconds * 1000);
  56. try {
  57. URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
  58. String objectUrl = url.toString();
  59. cacheUtils.set(objectUrlCacheName, objectName, objectUrl);
  60. return objectUrl;
  61. } catch (OSSException | ClientException e) {
  62. log.error(e.getMessage());
  63. throw HelperException.of(ExceptionType.ERROR, "获取文件链接失败");
  64. } finally {
  65. if (ossClient != null) {
  66. ossClient.shutdown();
  67. }
  68. }
  69. }
  70. public void copy(String sourceObjectName, String destinationObjectName) {
  71. OSS ossClient = getOss();
  72. try {
  73. ossClient.copyObject(bucketName, sourceObjectName, bucketName, destinationObjectName);
  74. } catch (OSSException | ClientException e) {
  75. log.error(e.getMessage());
  76. throw HelperException.of(ExceptionType.ERROR, "文件复制失败");
  77. } finally {
  78. if (ossClient != null) {
  79. ossClient.shutdown();
  80. }
  81. }
  82. }
  83. @Async
  84. public void delete(String objectName) {
  85. OSS ossClient = getOss();
  86. try {
  87. ossClient.deleteObject(bucketName, objectName);
  88. } catch (OSSException | ClientException e) {
  89. log.error(e.getMessage());
  90. throw HelperException.of(ExceptionType.ERROR, "文件删除失败");
  91. } finally {
  92. if (ossClient != null) {
  93. ossClient.shutdown();
  94. }
  95. }
  96. }
  97. private OSS getOss() {
  98. return new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  99. }
  100. }