AliyunOssStrategy.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package com.ruoyi.oss.service.impl;
  2. import com.aliyun.oss.ClientConfiguration;
  3. import com.aliyun.oss.OSSClient;
  4. import com.aliyun.oss.common.auth.DefaultCredentialProvider;
  5. import com.aliyun.oss.common.comm.Protocol;
  6. import com.aliyun.oss.model.CannedAccessControlList;
  7. import com.aliyun.oss.model.CreateBucketRequest;
  8. import com.aliyun.oss.model.ObjectMetadata;
  9. import com.aliyun.oss.model.PutObjectRequest;
  10. import com.ruoyi.common.utils.StringUtils;
  11. import com.ruoyi.oss.constant.OssConstant;
  12. import com.ruoyi.oss.entity.UploadResult;
  13. import com.ruoyi.oss.enumd.OssEnumd;
  14. import com.ruoyi.oss.exception.OssException;
  15. import com.ruoyi.oss.properties.OssProperties;
  16. import com.ruoyi.oss.service.abstractd.AbstractOssStrategy;
  17. import org.springframework.stereotype.Component;
  18. import java.io.ByteArrayInputStream;
  19. import java.io.InputStream;
  20. /**
  21. * 阿里云存储策略
  22. *
  23. * @author Lion Li
  24. */
  25. @Component
  26. public class AliyunOssStrategy extends AbstractOssStrategy {
  27. private OSSClient client;
  28. @Override
  29. public void init(OssProperties ossProperties) {
  30. super.init(ossProperties);
  31. try {
  32. ClientConfiguration configuration = new ClientConfiguration();
  33. if (OssConstant.IS_HTTPS.equals(ossProperties.getIsHttps())) {
  34. configuration.setProtocol(Protocol.HTTPS);
  35. }
  36. DefaultCredentialProvider credentialProvider = new DefaultCredentialProvider(
  37. properties.getAccessKey(), properties.getSecretKey());
  38. client = new OSSClient(properties.getEndpoint(), credentialProvider, configuration);
  39. createBucket();
  40. } catch (Exception e) {
  41. throw new OssException("阿里云存储配置错误! 请检查系统配置:[" + e.getMessage() + "]");
  42. }
  43. isInit = true;
  44. }
  45. @Override
  46. public void createBucket() {
  47. try {
  48. String bucketName = properties.getBucketName();
  49. if (client.doesBucketExist(bucketName)) {
  50. return;
  51. }
  52. CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
  53. createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
  54. client.createBucket(createBucketRequest);
  55. } catch (Exception e) {
  56. throw new OssException("创建Bucket失败, 请核对阿里云配置信息:[" + e.getMessage() + "]");
  57. }
  58. }
  59. @Override
  60. public OssEnumd getServiceType() {
  61. return OssEnumd.ALIYUN;
  62. }
  63. @Override
  64. public UploadResult upload(byte[] data, String path, String contentType) {
  65. return upload(new ByteArrayInputStream(data), path, contentType);
  66. }
  67. @Override
  68. public UploadResult upload(InputStream inputStream, String path, String contentType) {
  69. try {
  70. ObjectMetadata metadata = new ObjectMetadata();
  71. metadata.setContentType(contentType);
  72. client.putObject(new PutObjectRequest(properties.getBucketName(), path, inputStream, metadata));
  73. } catch (Exception e) {
  74. throw new OssException("上传文件失败,请检查阿里云配置信息:[" + e.getMessage() + "]");
  75. }
  76. return UploadResult.builder().url(getEndpointLink() + "/" + path).filename(path).build(); }
  77. @Override
  78. public void delete(String path) {
  79. path = path.replace(getEndpointLink() + "/", "");
  80. try {
  81. client.deleteObject(properties.getBucketName(), path);
  82. } catch (Exception e) {
  83. throw new OssException("上传文件失败,请检查阿里云配置信息:[" + e.getMessage() + "]");
  84. }
  85. }
  86. @Override
  87. public UploadResult uploadSuffix(byte[] data, String suffix, String contentType) {
  88. return upload(data, getPath(properties.getPrefix(), suffix), contentType);
  89. }
  90. @Override
  91. public UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType) {
  92. return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType);
  93. }
  94. @Override
  95. public String getEndpointLink() {
  96. String endpoint = properties.getEndpoint();
  97. StringBuilder sb = new StringBuilder(endpoint);
  98. if (StringUtils.containsAnyIgnoreCase(endpoint, "http://")) {
  99. sb.insert(7, properties.getBucketName() + ".");
  100. } else if (StringUtils.containsAnyIgnoreCase(endpoint, "https://")) {
  101. sb.insert(8, properties.getBucketName() + ".");
  102. } else {
  103. throw new OssException("Endpoint配置错误");
  104. }
  105. return sb.toString();
  106. }
  107. }