AliyunOssStrategy.java 3.8 KB

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