Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: support huaweicloud OBS for Oss #499

Closed
showlovetommy opened this issue Mar 3, 2023 · 0 comments
Closed

feat: support huaweicloud OBS for Oss #499

showlovetommy opened this issue Mar 3, 2023 · 0 comments
Labels
enhancement New feature or request

Comments

@showlovetommy
Copy link
Contributor

I'd like to support HuaweiCloud OBS for Oss.

I want to deploy the ApiTable on HuaweiCloud and use the obs as the storage.

TodoList:

  1. add the obs dependencies on backend-server\lib.gradle
    'huaweicloud-obs' : "com.huaweicloud:esdk-obs-java-bundle:${huaweicloud_obs_sdk_version}"
  2. define the package version on backend-server/gradle.properties
    huaweicloud_obs_sdk_version=3.22.12
  3. add HuaweiCloud class on com.apitable.starter.oss\autoconfigure\OssProperties
public class OssProperties {
    ...
    private HuaweiCloud huaweicloud;
    public HuaweiCloud getHuaweicloud() {
        return huaweicloud;
    }
    public void setHuaweicloud(HuaweiCloud huaweicloud) {
        this.huaweicloud = huaweicloud;
    }
    public static class HuaweiCloud {
        private String endpoint;
        private String accessKey;
        private String secretKey;
        public String getEndpoint() {
            return endpoint;
        }
        public void setEndpoint(String endpoint) {
            this.endpoint = endpoint;
        }
        public String getAccessKey() {
            return accessKey;
        }
        public void setAccessKey(String accessKey) {
            this.accessKey = accessKey;
        }
        public String getSecretKey() {
            return secretKey;
        }
        public void setSecretKey(String secretKey) {
            this.secretKey = secretKey;
        }
    }
   // add a new enum OssType
    public enum OssType {
    ...
        /**
         * Huawei Cloud
         */
        HUAWEICLOUD
    }
} 
  1. add HuaweiCloudOssClientRequest on com.apitable.starter.oss\core\obs
  public class HuaweiCloudOssClientRequest  extends AbstractOssClientRequest{
  
      private static final Logger LOGGER = LoggerFactory.getLogger(com.apitable.starter.oss.core.obs.HuaweiCloudOssClientRequest.class);
      private final ObsClient obsClient;
      public HuaweiCloudOssClientRequest(ObsClient obsClient) {
          this.obsClient = obsClient;
      }
      public HuaweiCloudOssClientRequest(ObsClient obsClient, boolean autoCreateBucket) {
          this.obsClient = obsClient;
          this.autoCreateBucket = autoCreateBucket;
      }
      @Override
      protected boolean isBucketExist(String bucketName) {
      }
      @Override
      public boolean deleteObject(String bucketName, String key) {
      }
      @Override
      public OssObject getObject(String bucketName, String path) {
      }
      @Override
      public OssStatObject getStatObject(String bucketName, String key) {
      }
      @Override
      public void executeStreamFunction(String bucketName, String key, Consumer<InputStream> function) {
      }
      @Override
      public void refreshCdn(String bucketName, String[] url) {
      }
      @Override
      public UrlFetchResponse uploadRemoteUrl(String bucketName, String remoteSrcUrl, String keyPath) throws IOException {
      }
      @Override
      public void uploadStreamForObject(String bucketName, InputStream in, String keyPath) throws IOException {
      }
      @Override
      public void uploadStreamForObject(String bucketName, InputStream in, String path, String mimeType, String digest)
      }
  }
  1. add HuaweiCloudOssClientRequestFactory class on com.apitable.starter.oss\core\obs
public class HuaweiCloudOssClientRequestFactory implements OssClientRequestFactory {
    private final String ak;
    private final String sk;
    private final String endpoint;
    public HuaweiCloudOssClientRequestFactory(String ak, String sk, String endpoint) {
        this.ak = ak;
        this.sk = sk;
        this.endpoint = endpoint;
    }
    @Override
    public OssClientRequest createClient() {
        ObsClient obsClient = new ObsClient(ak, sk, endpoint);
        return new HuaweiCloudOssClientRequest(obsClient, true);
    }
}
  1. add HuaweiCloudOBSAutoConfiguration class on com.apitable.starter.oss\autoconfigure
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(ObsClient.class)
@ConditionalOnProperty(value = "starter.oss.type", havingValue = "huawei-cloud")
public class HuaweiCloudOBSAutoConfiguration extends  OssConnectionConfiguration{
    public HuaweiCloudOBSAutoConfiguration(OssProperties properties) {
        super(properties);
    }
    @Bean
    @ConditionalOnMissingBean(OssClientRequestFactory.class)
    OssClientRequestFactory ossClientRequestFactory() {
      HuaweiCloud huaweicloud = getProperties().getHuaweicloud();
      return new HuaweiCloudOssClientRequestFactory( huaweicloud.getAccessKey(), huaweicloud.getSecretKey(), huaweicloud.getEndpoint());
    }
}
  1. add HuaweiCloudOBSAutoConfiguration.class on com.apitable.starter.oss\autoconfigure\OssAutoConfiguration @import
@Import({ AwsS3AutoConfiguration.class,
        QiniuCloudAutoConfiguration.class,
        HuaweiCloudOBSAutoConfiguration.class,
        MinioAutoConfiguration.class })
public class OssAutoConfiguration {
...
}
  1. add config on backend-server\application\src\main\resources\application.yml
starter:
  oss:
    huawei-cloud:
      access-key: ${HUAWEICLOUD_ACCESS_KEY:}
      secret-key: ${HUAWEICLOUD_SECRET_KEY:}
      endpoint: ${HUAWEICLOUD_ENDPOINT:obs.cn-south-1.myhuaweicloud.com}
  1. add ENVIRONMENT_VAR on .env
HUAWEICLOUD_ACCESS_KEY= YOUR AK
HUAWEICLOUD_SECRET_KEY= YOUR SK
HUAWEICLOUD_ENDPOINT= YOUR ENDPOINT
@showlovetommy showlovetommy added the enhancement New feature or request label Mar 3, 2023
shawndenggh pushed a commit that referenced this issue Mar 13, 2023
Support HuaweiCloud OBS for oss to upload and download files.
More details below:
[feat: support huaweicloud OBS for Oss
#499](#499)

---------

Co-authored-by: mmy <huangxiang37@huawei.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants