浏览代码

refactor:oss模块引入

Longjun.Tu 2 年之前
父节点
当前提交
aa2423c7d1
共有 44 个文件被更改,包括 597 次插入15 次删除
  1. 1 1
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/ICommonData.java
  2. 2 1
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/IOwnedData.java
  3. 2 1
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IAlertConfigData.java
  4. 2 1
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IAlertRecordData.java
  5. 1 0
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/ICategoryData.java
  6. 1 0
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IChannelConfigData.java
  7. 1 0
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IChannelData.java
  8. 1 0
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IChannelTemplateData.java
  9. 1 0
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IDeviceConfigData.java
  10. 1 0
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IDeviceGroupData.java
  11. 1 0
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IDeviceInfoData.java
  12. 1 0
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IHomeData.java
  13. 1 0
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IOauthClientData.java
  14. 1 0
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IProductData.java
  15. 1 0
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IProductModelData.java
  16. 1 0
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IProtocolComponentData.java
  17. 1 0
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IProtocolConverterData.java
  18. 1 0
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IRuleInfoData.java
  19. 1 0
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/ISpaceData.java
  20. 1 0
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/ISpaceDeviceData.java
  21. 1 0
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/ITaskInfoData.java
  22. 1 0
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IThingModelData.java
  23. 1 0
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IUserInfoData.java
  24. 1 0
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IVirtualDeviceData.java
  25. 1 2
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysConfigData.java
  26. 1 1
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysDeptData.java
  27. 1 1
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysDictData.java
  28. 1 1
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysDictTypeData.java
  29. 1 1
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysLogininforData.java
  30. 1 1
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysMenuData.java
  31. 1 1
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysNoticeData.java
  32. 1 1
      iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysOperLogData.java
  33. 1 1
      iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/CommonService.java
  34. 16 0
      iot-common/iot-common-oss/pom.xml
  35. 38 0
      iot-common/iot-common-oss/src/main/java/cc/iotkit/common/oss/constant/OssConstant.java
  36. 245 0
      iot-common/iot-common-oss/src/main/java/cc/iotkit/common/oss/core/OssClient.java
  37. 24 0
      iot-common/iot-common-oss/src/main/java/cc/iotkit/common/oss/entity/UploadResult.java
  38. 55 0
      iot-common/iot-common-oss/src/main/java/cc/iotkit/common/oss/enumd/AccessPolicyType.java
  39. 35 0
      iot-common/iot-common-oss/src/main/java/cc/iotkit/common/oss/enumd/PolicyType.java
  40. 18 0
      iot-common/iot-common-oss/src/main/java/cc/iotkit/common/oss/exception/OssException.java
  41. 64 0
      iot-common/iot-common-oss/src/main/java/cc/iotkit/common/oss/factory/OssFactory.java
  42. 58 0
      iot-common/iot-common-oss/src/main/java/cc/iotkit/common/oss/properties/OssProperties.java
  43. 1 1
      iot-module/iot-manager/src/main/java/cc/iotkit/manager/service/DataOwnerService.java
  44. 7 0
      pom.xml

+ 1 - 1
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/ICommonData.java → iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/ICommonData.java

@@ -7,7 +7,7 @@
  * | Author: xw2sy@163.com
  * +----------------------------------------------------------------------
  */
-package cc.iotkit.data.manager;
+package cc.iotkit.data;
 
 import cc.iotkit.model.Id;
 import cc.iotkit.common.api.Paging;

+ 2 - 1
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IOwnedData.java → iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/IOwnedData.java

@@ -7,8 +7,9 @@
  * | Author: xw2sy@163.com
  * +----------------------------------------------------------------------
  */
-package cc.iotkit.data.manager;
+package cc.iotkit.data;
 
+import cc.iotkit.data.ICommonData;
 import cc.iotkit.model.Owned;
 import cc.iotkit.common.api.Paging;
 

+ 2 - 1
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IAlertConfigData.java

@@ -11,10 +11,11 @@ package cc.iotkit.data.manager;
 
 import cc.iotkit.common.api.PageRequest;
 import cc.iotkit.common.api.Paging;
+import cc.iotkit.data.ICommonData;
 import cc.iotkit.model.alert.AlertConfig;
 
 
-public interface IAlertConfigData extends  ICommonData<AlertConfig, String>  {
+public interface IAlertConfigData extends ICommonData<AlertConfig, String> {
 
 
   Paging<AlertConfig> selectAlertConfigPage(PageRequest<AlertConfig> request);

+ 2 - 1
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IAlertRecordData.java

@@ -11,10 +11,11 @@ package cc.iotkit.data.manager;
 
 import cc.iotkit.common.api.PageRequest;
 import cc.iotkit.common.api.Paging;
+import cc.iotkit.data.ICommonData;
 import cc.iotkit.model.alert.AlertRecord;
 
 
-public interface IAlertRecordData extends ICommonData<AlertRecord, String>  {
+public interface IAlertRecordData extends ICommonData<AlertRecord, String> {
 
 
   Paging<AlertRecord> selectAlertConfigPage(PageRequest<AlertRecord> request);

+ 1 - 0
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/ICategoryData.java

@@ -9,6 +9,7 @@
  */
 package cc.iotkit.data.manager;
 
+import cc.iotkit.data.ICommonData;
 import cc.iotkit.model.product.Category;
 
 public interface ICategoryData extends ICommonData<Category, String> {

+ 1 - 0
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IChannelConfigData.java

@@ -1,5 +1,6 @@
 package cc.iotkit.data.manager;
 
+import cc.iotkit.data.ICommonData;
 import cc.iotkit.model.notify.ChannelConfig;
 
 /**

+ 1 - 0
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IChannelData.java

@@ -1,5 +1,6 @@
 package cc.iotkit.data.manager;
 
+import cc.iotkit.data.ICommonData;
 import cc.iotkit.model.notify.Channel;
 
 /**

+ 1 - 0
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IChannelTemplateData.java

@@ -1,5 +1,6 @@
 package cc.iotkit.data.manager;
 
+import cc.iotkit.data.ICommonData;
 import cc.iotkit.model.notify.ChannelTemplate;
 
 /**

+ 1 - 0
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IDeviceConfigData.java

@@ -9,6 +9,7 @@
  */
 package cc.iotkit.data.manager;
 
+import cc.iotkit.data.ICommonData;
 import cc.iotkit.model.device.DeviceConfig;
 
 public interface IDeviceConfigData extends ICommonData<DeviceConfig, String> {

+ 1 - 0
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IDeviceGroupData.java

@@ -10,6 +10,7 @@
 package cc.iotkit.data.manager;
 
 import cc.iotkit.common.api.Paging;
+import cc.iotkit.data.ICommonData;
 import cc.iotkit.model.device.DeviceGroup;
 
 public interface IDeviceGroupData extends ICommonData<DeviceGroup, String> {

+ 1 - 0
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IDeviceInfoData.java

@@ -10,6 +10,7 @@
 package cc.iotkit.data.manager;
 
 import cc.iotkit.common.api.Paging;
+import cc.iotkit.data.IOwnedData;
 import cc.iotkit.model.device.DeviceInfo;
 import cc.iotkit.model.stats.DataItem;
 

+ 1 - 0
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IHomeData.java

@@ -9,6 +9,7 @@
  */
 package cc.iotkit.data.manager;
 
+import cc.iotkit.data.IOwnedData;
 import cc.iotkit.model.space.Home;
 
 

+ 1 - 0
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IOauthClientData.java

@@ -9,6 +9,7 @@
  */
 package cc.iotkit.data.manager;
 
+import cc.iotkit.data.ICommonData;
 import cc.iotkit.model.OauthClient;
 
 public interface IOauthClientData extends ICommonData<OauthClient, String> {

+ 1 - 0
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IProductData.java

@@ -9,6 +9,7 @@
  */
 package cc.iotkit.data.manager;
 
+import cc.iotkit.data.IOwnedData;
 import cc.iotkit.model.product.Product;
 
 import java.util.List;

+ 1 - 0
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IProductModelData.java

@@ -9,6 +9,7 @@
  */
 package cc.iotkit.data.manager;
 
+import cc.iotkit.data.ICommonData;
 import cc.iotkit.model.product.ProductModel;
 
 import java.util.List;

+ 1 - 0
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IProtocolComponentData.java

@@ -1,5 +1,6 @@
 package cc.iotkit.data.manager;
 
+import cc.iotkit.data.IOwnedData;
 import cc.iotkit.model.protocol.ProtocolComponent;
 
 import java.util.List;

+ 1 - 0
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IProtocolConverterData.java

@@ -1,5 +1,6 @@
 package cc.iotkit.data.manager;
 
+import cc.iotkit.data.IOwnedData;
 import cc.iotkit.model.protocol.ProtocolConverter;
 
 public interface IProtocolConverterData extends IOwnedData<ProtocolConverter, String> {

+ 1 - 0
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IRuleInfoData.java

@@ -1,6 +1,7 @@
 package cc.iotkit.data.manager;
 
 import cc.iotkit.common.api.Paging;
+import cc.iotkit.data.IOwnedData;
 import cc.iotkit.model.rule.RuleInfo;
 
 import java.util.List;

+ 1 - 0
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/ISpaceData.java

@@ -9,6 +9,7 @@
  */
 package cc.iotkit.data.manager;
 
+import cc.iotkit.data.IOwnedData;
 import cc.iotkit.model.space.Space;
 
 import java.util.List;

+ 1 - 0
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/ISpaceDeviceData.java

@@ -9,6 +9,7 @@
  */
 package cc.iotkit.data.manager;
 
+import cc.iotkit.data.IOwnedData;
 import cc.iotkit.model.space.SpaceDevice;
 
 import java.util.List;

+ 1 - 0
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/ITaskInfoData.java

@@ -1,5 +1,6 @@
 package cc.iotkit.data.manager;
 
+import cc.iotkit.data.IOwnedData;
 import cc.iotkit.model.rule.TaskInfo;
 
 public interface ITaskInfoData extends IOwnedData<TaskInfo, String> {

+ 1 - 0
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IThingModelData.java

@@ -1,5 +1,6 @@
 package cc.iotkit.data.manager;
 
+import cc.iotkit.data.ICommonData;
 import cc.iotkit.model.product.ThingModel;
 
 public interface IThingModelData extends ICommonData<ThingModel, String> {

+ 1 - 0
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IUserInfoData.java

@@ -9,6 +9,7 @@
  */
 package cc.iotkit.data.manager;
 
+import cc.iotkit.data.ICommonData;
 import cc.iotkit.model.UserInfo;
 
 import java.util.List;

+ 1 - 0
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IVirtualDeviceData.java

@@ -10,6 +10,7 @@
 package cc.iotkit.data.manager;
 
 import cc.iotkit.common.api.Paging;
+import cc.iotkit.data.IOwnedData;
 import cc.iotkit.model.device.VirtualDevice;
 
 import java.util.List;

+ 1 - 2
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysConfigData.java

@@ -1,7 +1,6 @@
 package cc.iotkit.data.system;
 
-import cc.iotkit.common.api.Paging;
-import cc.iotkit.data.manager.ICommonData;
+import cc.iotkit.data.ICommonData;
 import cc.iotkit.model.system.SysConfig;
 
 /**

+ 1 - 1
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysDeptData.java

@@ -1,7 +1,7 @@
 package cc.iotkit.data.system;
 
 
-import cc.iotkit.data.manager.ICommonData;
+import cc.iotkit.data.ICommonData;
 import cc.iotkit.common.api.Paging;
 import cc.iotkit.model.system.SysDept;
 

+ 1 - 1
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysDictData.java

@@ -1,6 +1,6 @@
 package cc.iotkit.data.system;
 
-import cc.iotkit.data.manager.ICommonData;
+import cc.iotkit.data.ICommonData;
 import cc.iotkit.common.api.Paging;
 import cc.iotkit.model.system.SysDictData;
 import cc.iotkit.model.system.SysDictType;

+ 1 - 1
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysDictTypeData.java

@@ -1,6 +1,6 @@
 package cc.iotkit.data.system;
 
-import cc.iotkit.data.manager.ICommonData;
+import cc.iotkit.data.ICommonData;
 import cc.iotkit.common.api.Paging;
 import cc.iotkit.model.system.SysDictType;
 

+ 1 - 1
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysLogininforData.java

@@ -1,6 +1,6 @@
 package cc.iotkit.data.system;
 
-import cc.iotkit.data.manager.ICommonData;
+import cc.iotkit.data.ICommonData;
 import cc.iotkit.common.api.Paging;
 import cc.iotkit.model.system.SysLogininfor;
 

+ 1 - 1
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysMenuData.java

@@ -1,6 +1,6 @@
 package cc.iotkit.data.system;
 
-import cc.iotkit.data.manager.ICommonData;
+import cc.iotkit.data.ICommonData;
 import cc.iotkit.model.system.SysMenu;
 
 import java.util.List;

+ 1 - 1
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysNoticeData.java

@@ -1,6 +1,6 @@
 package cc.iotkit.data.system;
 
-import cc.iotkit.data.manager.ICommonData;
+import cc.iotkit.data.ICommonData;
 import cc.iotkit.common.api.Paging;
 import cc.iotkit.model.system.SysNotice;
 

+ 1 - 1
iot-common/iot-common-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysOperLogData.java

@@ -1,6 +1,6 @@
 package cc.iotkit.data.system;
 
-import cc.iotkit.data.manager.ICommonData;
+import cc.iotkit.data.ICommonData;
 import cc.iotkit.common.api.Paging;
 import cc.iotkit.model.system.SysOperLog;
 

+ 1 - 1
iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/CommonService.java

@@ -9,7 +9,7 @@
  */
 package cc.iotkit.data.service;
 
-import cc.iotkit.data.manager.ICommonData;
+import cc.iotkit.data.ICommonData;
 import cc.iotkit.model.Id;
 import cc.iotkit.common.api.Paging;
 import org.springframework.data.domain.Page;

+ 16 - 0
iot-common/iot-common-oss/pom.xml

@@ -10,6 +10,22 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>iot-common-oss</artifactId>
+    <dependencies>
+    <dependency>
+        <groupId>com.amazonaws</groupId>
+        <artifactId>aws-java-sdk-s3</artifactId>
+    </dependency>
+
+    <dependency>
+        <groupId>cc.iotkit</groupId>
+        <artifactId>iot-common-redis</artifactId>
+    </dependency>
+
+    <dependency>
+        <groupId>cc.iotkit</groupId>
+        <artifactId>iot-common-core</artifactId>
+    </dependency>
+    </dependencies>
 
     <build>
         <plugins>

+ 38 - 0
iot-common/iot-common-oss/src/main/java/cc/iotkit/common/oss/constant/OssConstant.java

@@ -0,0 +1,38 @@
+package cc.iotkit.common.oss.constant;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 对象存储常量
+ *
+ * @author Lion Li
+ */
+public interface OssConstant {
+
+    /**
+     * 默认配置KEY
+     */
+    String DEFAULT_CONFIG_KEY = "sys_oss:default_config";
+
+    /**
+     * 预览列表资源开关Key
+     */
+    String PEREVIEW_LIST_RESOURCE_KEY = "sys.oss.previewListResource";
+
+    /**
+     * 系统数据ids
+     */
+    List<Long> SYSTEM_DATA_IDS = Arrays.asList(1L, 2L, 3L, 4L);
+
+    /**
+     * 云服务商
+     */
+    String[] CLOUD_SERVICE = new String[] {"aliyun", "qcloud", "qiniu", "obs"};
+
+    /**
+     * https 状态
+     */
+    String IS_HTTPS = "Y";
+
+}

+ 245 - 0
iot-common/iot-common-oss/src/main/java/cc/iotkit/common/oss/core/OssClient.java

@@ -0,0 +1,245 @@
+package cc.iotkit.common.oss.core;
+
+import cc.iotkit.common.oss.constant.OssConstant;
+import cc.iotkit.common.oss.exception.OssException;
+import cc.iotkit.common.oss.properties.OssProperties;
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.core.util.IdUtil;
+import com.amazonaws.ClientConfiguration;
+import com.amazonaws.HttpMethod;
+import com.amazonaws.Protocol;
+import com.amazonaws.auth.AWSCredentials;
+import com.amazonaws.auth.AWSCredentialsProvider;
+import com.amazonaws.auth.AWSStaticCredentialsProvider;
+import com.amazonaws.auth.BasicAWSCredentials;
+import com.amazonaws.client.builder.AwsClientBuilder;
+import com.amazonaws.services.s3.AmazonS3;
+import com.amazonaws.services.s3.AmazonS3Client;
+import com.amazonaws.services.s3.AmazonS3ClientBuilder;
+import com.amazonaws.services.s3.model.*;
+import org.dromara.common.core.utils.DateUtils;
+import org.dromara.common.core.utils.StringUtils;
+import cc.iotkit.common.oss.entity.UploadResult;
+import cc.iotkit.common.oss.enumd.AccessPolicyType;
+import cc.iotkit.common.oss.enumd.PolicyType;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Date;
+
+/**
+ * S3 存储协议 所有兼容S3协议的云厂商均支持
+ * 阿里云 腾讯云 七牛云 minio
+ *
+ * @author Lion Li
+ */
+public class OssClient {
+
+    private final String configKey;
+
+    private final OssProperties properties;
+
+    private final AmazonS3 client;
+
+    public OssClient(String configKey, OssProperties ossProperties) {
+        this.configKey = configKey;
+        this.properties = ossProperties;
+        try {
+            AwsClientBuilder.EndpointConfiguration endpointConfig =
+                new AwsClientBuilder.EndpointConfiguration(properties.getEndpoint(), properties.getRegion());
+
+            AWSCredentials credentials = new BasicAWSCredentials(properties.getAccessKey(), properties.getSecretKey());
+            AWSCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(credentials);
+            ClientConfiguration clientConfig = new ClientConfiguration();
+            if (OssConstant.IS_HTTPS.equals(properties.getIsHttps())) {
+                clientConfig.setProtocol(Protocol.HTTPS);
+            } else {
+                clientConfig.setProtocol(Protocol.HTTP);
+            }
+            AmazonS3ClientBuilder build = AmazonS3Client.builder()
+                .withEndpointConfiguration(endpointConfig)
+                .withClientConfiguration(clientConfig)
+                .withCredentials(credentialsProvider)
+                .disableChunkedEncoding();
+            if (!StringUtils.containsAny(properties.getEndpoint(), OssConstant.CLOUD_SERVICE)) {
+                // minio 使用https限制使用域名访问 需要此配置 站点填域名
+                build.enablePathStyleAccess();
+            }
+            this.client = build.build();
+
+            createBucket();
+        } catch (Exception e) {
+            if (e instanceof OssException) {
+                throw e;
+            }
+            throw new OssException("配置错误! 请检查系统配置:[" + e.getMessage() + "]");
+        }
+    }
+
+    public void createBucket() {
+        try {
+            String bucketName = properties.getBucketName();
+            if (client.doesBucketExistV2(bucketName)) {
+                return;
+            }
+            CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
+            AccessPolicyType accessPolicy = getAccessPolicy();
+            createBucketRequest.setCannedAcl(accessPolicy.getAcl());
+            client.createBucket(createBucketRequest);
+            client.setBucketPolicy(bucketName, getPolicy(bucketName, accessPolicy.getPolicyType()));
+        } catch (Exception e) {
+            throw new OssException("创建Bucket失败, 请核对配置信息:[" + e.getMessage() + "]");
+        }
+    }
+
+    public UploadResult upload(byte[] data, String path, String contentType) {
+        return upload(new ByteArrayInputStream(data), path, contentType);
+    }
+
+    public UploadResult upload(InputStream inputStream, String path, String contentType) {
+        if (!(inputStream instanceof ByteArrayInputStream)) {
+            inputStream = new ByteArrayInputStream(IoUtil.readBytes(inputStream));
+        }
+        try {
+            ObjectMetadata metadata = new ObjectMetadata();
+            metadata.setContentType(contentType);
+            metadata.setContentLength(inputStream.available());
+            PutObjectRequest putObjectRequest = new PutObjectRequest(properties.getBucketName(), path, inputStream, metadata);
+            // 设置上传对象的 Acl 为公共读
+            putObjectRequest.setCannedAcl(getAccessPolicy().getAcl());
+            client.putObject(putObjectRequest);
+        } catch (Exception e) {
+            throw new OssException("上传文件失败,请检查配置信息:[" + e.getMessage() + "]");
+        }
+        return UploadResult.builder().url(getUrl() + "/" + path).filename(path).build();
+    }
+
+    public void delete(String path) {
+        path = path.replace(getUrl() + "/", "");
+        try {
+            client.deleteObject(properties.getBucketName(), path);
+        } catch (Exception e) {
+            throw new OssException("删除文件失败,请检查配置信息:[" + e.getMessage() + "]");
+        }
+    }
+
+    public UploadResult uploadSuffix(byte[] data, String suffix, String contentType) {
+        return upload(data, getPath(properties.getPrefix(), suffix), contentType);
+    }
+
+    public UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType) {
+        return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType);
+    }
+
+    /**
+     * 获取文件元数据
+     *
+     * @param path 完整文件路径
+     */
+    public ObjectMetadata getObjectMetadata(String path) {
+        path = path.replace(getUrl() + "/", "");
+        S3Object object = client.getObject(properties.getBucketName(), path);
+        return object.getObjectMetadata();
+    }
+
+    public InputStream getObjectContent(String path) {
+        path = path.replace(getUrl() + "/", "");
+        S3Object object = client.getObject(properties.getBucketName(), path);
+        return object.getObjectContent();
+    }
+
+    public String getUrl() {
+        String domain = properties.getDomain();
+        String endpoint = properties.getEndpoint();
+        String header = OssConstant.IS_HTTPS.equals(properties.getIsHttps()) ? "https://" : "http://";
+        // 云服务商直接返回
+        if (StringUtils.containsAny(endpoint, OssConstant.CLOUD_SERVICE)) {
+            if (StringUtils.isNotBlank(domain)) {
+                return header + domain;
+            }
+            return header + properties.getBucketName() + "." + endpoint;
+        }
+        // minio 单独处理
+        if (StringUtils.isNotBlank(domain)) {
+            return header + domain + "/" + properties.getBucketName();
+        }
+        return header + endpoint + "/" + properties.getBucketName();
+    }
+
+    public String getPath(String prefix, String suffix) {
+        // 生成uuid
+        String uuid = IdUtil.fastSimpleUUID();
+        // 文件路径
+        String path = DateUtils.datePath() + "/" + uuid;
+        if (StringUtils.isNotBlank(prefix)) {
+            path = prefix + "/" + path;
+        }
+        return path + suffix;
+    }
+
+
+    public String getConfigKey() {
+        return configKey;
+    }
+
+    /**
+     * 获取私有URL链接
+     *
+     * @param objectKey 对象KEY
+     * @param second    授权时间
+     */
+    public String getPrivateUrl(String objectKey, Integer second) {
+        GeneratePresignedUrlRequest generatePresignedUrlRequest =
+            new GeneratePresignedUrlRequest(properties.getBucketName(), objectKey)
+                .withMethod(HttpMethod.GET)
+                .withExpiration(new Date(System.currentTimeMillis() + 1000L * second));
+        URL url = client.generatePresignedUrl(generatePresignedUrlRequest);
+        return url.toString();
+    }
+
+    /**
+     * 检查配置是否相同
+     */
+    public boolean checkPropertiesSame(OssProperties properties) {
+        return this.properties.equals(properties);
+    }
+
+    /**
+     * 获取当前桶权限类型
+     *
+     * @return 当前桶权限类型code
+     */
+    public AccessPolicyType getAccessPolicy() {
+        return AccessPolicyType.getByType(properties.getAccessPolicy());
+    }
+
+    private static String getPolicy(String bucketName, PolicyType policyType) {
+        StringBuilder builder = new StringBuilder();
+        builder.append("{\n\"Statement\": [\n{\n\"Action\": [\n");
+        builder.append(switch (policyType) {
+            case WRITE -> "\"s3:GetBucketLocation\",\n\"s3:ListBucketMultipartUploads\"\n";
+            case READ_WRITE -> "\"s3:GetBucketLocation\",\n\"s3:ListBucket\",\n\"s3:ListBucketMultipartUploads\"\n";
+            default -> "\"s3:GetBucketLocation\"\n";
+        });
+        builder.append("],\n\"Effect\": \"Allow\",\n\"Principal\": \"*\",\n\"Resource\": \"arn:aws:s3:::");
+        builder.append(bucketName);
+        builder.append("\"\n},\n");
+        if (policyType == PolicyType.READ) {
+            builder.append("{\n\"Action\": [\n\"s3:ListBucket\"\n],\n\"Effect\": \"Deny\",\n\"Principal\": \"*\",\n\"Resource\": \"arn:aws:s3:::");
+            builder.append(bucketName);
+            builder.append("\"\n},\n");
+        }
+        builder.append("{\n\"Action\": ");
+        builder.append(switch (policyType) {
+            case WRITE -> "[\n\"s3:AbortMultipartUpload\",\n\"s3:DeleteObject\",\n\"s3:ListMultipartUploadParts\",\n\"s3:PutObject\"\n],\n";
+            case READ_WRITE -> "[\n\"s3:AbortMultipartUpload\",\n\"s3:DeleteObject\",\n\"s3:GetObject\",\n\"s3:ListMultipartUploadParts\",\n\"s3:PutObject\"\n],\n";
+            default -> "\"s3:GetObject\",\n";
+        });
+        builder.append("\"Effect\": \"Allow\",\n\"Principal\": \"*\",\n\"Resource\": \"arn:aws:s3:::");
+        builder.append(bucketName);
+        builder.append("/*\"\n}\n],\n\"Version\": \"2012-10-17\"\n}\n");
+        return builder.toString();
+    }
+
+}

+ 24 - 0
iot-common/iot-common-oss/src/main/java/cc/iotkit/common/oss/entity/UploadResult.java

@@ -0,0 +1,24 @@
+package cc.iotkit.common.oss.entity;
+
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * 上传返回体
+ *
+ * @author Lion Li
+ */
+@Data
+@Builder
+public class UploadResult {
+
+    /**
+     * 文件路径
+     */
+    private String url;
+
+    /**
+     * 文件名
+     */
+    private String filename;
+}

+ 55 - 0
iot-common/iot-common-oss/src/main/java/cc/iotkit/common/oss/enumd/AccessPolicyType.java

@@ -0,0 +1,55 @@
+package cc.iotkit.common.oss.enumd;
+
+import com.amazonaws.services.s3.model.CannedAccessControlList;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 桶访问策略配置
+ *
+ * @author 陈賝
+ */
+@Getter
+@AllArgsConstructor
+public enum AccessPolicyType {
+
+    /**
+     * private
+     */
+    PRIVATE("0", CannedAccessControlList.Private, PolicyType.WRITE),
+
+    /**
+     * public
+     */
+    PUBLIC("1", CannedAccessControlList.PublicRead, PolicyType.READ),
+
+    /**
+     * custom
+     */
+    CUSTOM("2",CannedAccessControlList.PublicRead, PolicyType.READ);
+
+    /**
+     * 桶 权限类型
+     */
+    private final String type;
+
+    /**
+     * 文件对象 权限类型
+     */
+    private final CannedAccessControlList acl;
+
+    /**
+     * 桶策略类型
+     */
+    private final PolicyType policyType;
+
+    public static AccessPolicyType getByType(String type) {
+        for (AccessPolicyType value : values()) {
+            if (value.getType().equals(type)) {
+                return value;
+            }
+        }
+        throw new RuntimeException("'type' not found By " + type);
+    }
+
+}

+ 35 - 0
iot-common/iot-common-oss/src/main/java/cc/iotkit/common/oss/enumd/PolicyType.java

@@ -0,0 +1,35 @@
+package cc.iotkit.common.oss.enumd;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * minio策略配置
+ *
+ * @author Lion Li
+ */
+@Getter
+@AllArgsConstructor
+public enum PolicyType {
+
+    /**
+     * 只读
+     */
+    READ("read-only"),
+
+    /**
+     * 只写
+     */
+    WRITE("write-only"),
+
+    /**
+     * 读写
+     */
+    READ_WRITE("read-write");
+
+    /**
+     * 类型
+     */
+    private final String type;
+
+}

+ 18 - 0
iot-common/iot-common-oss/src/main/java/cc/iotkit/common/oss/exception/OssException.java

@@ -0,0 +1,18 @@
+package cc.iotkit.common.oss.exception;
+
+
+/**
+ * OSS异常类
+ *
+ * @author Lion Li
+ */
+public class OssException extends RuntimeException {
+
+
+    private static final long serialVersionUID = 1L;
+
+    public OssException(String msg) {
+        super(msg);
+    }
+
+}

+ 64 - 0
iot-common/iot-common-oss/src/main/java/cc/iotkit/common/oss/factory/OssFactory.java

@@ -0,0 +1,64 @@
+package cc.iotkit.common.oss.factory;
+
+
+import cc.iotkit.common.constant.CacheNames;
+import cc.iotkit.common.oss.constant.OssConstant;
+import cc.iotkit.common.oss.core.OssClient;
+import cc.iotkit.common.oss.exception.OssException;
+import cc.iotkit.common.oss.properties.OssProperties;
+import cc.iotkit.common.redis.utils.CacheUtils;
+import cc.iotkit.common.redis.utils.RedisUtils;
+import cc.iotkit.common.utils.JsonUtils;
+import cc.iotkit.common.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * 文件上传Factory
+ *
+ * @author Lion Li
+ */
+@Slf4j
+public class OssFactory {
+
+    private static final Map<String, OssClient> CLIENT_CACHE = new ConcurrentHashMap<>();
+
+    /**
+     * 获取默认实例
+     */
+    public static OssClient instance() {
+        // 获取redis 默认类型
+        String configKey = RedisUtils.getCacheObject(OssConstant.DEFAULT_CONFIG_KEY);
+        if (StringUtils.isEmpty(configKey)) {
+            throw new OssException("文件存储服务类型无法找到!");
+        }
+        return instance(configKey);
+    }
+
+    /**
+     * 根据类型获取实例
+     */
+    public static OssClient instance(String configKey) {
+        String json = CacheUtils.get(CacheNames.SYS_OSS_CONFIG, configKey);
+        if (json == null) {
+            throw new OssException("系统异常, '" + configKey + "'配置信息不存在!");
+        }
+        OssProperties properties = JsonUtils.parseObject(json, OssProperties.class);
+        OssClient client = CLIENT_CACHE.get(configKey);
+        if (client == null) {
+            CLIENT_CACHE.put(configKey, new OssClient(configKey, properties));
+            log.info("创建OSS实例 key => {}", configKey);
+            return CLIENT_CACHE.get(configKey);
+        }
+        // 配置不相同则重新构建
+        if (!client.checkPropertiesSame(properties)) {
+            CLIENT_CACHE.put(configKey, new OssClient(configKey, properties));
+            log.info("重载OSS实例 key => {}", configKey);
+            return CLIENT_CACHE.get(configKey);
+        }
+        return client;
+    }
+
+}

+ 58 - 0
iot-common/iot-common-oss/src/main/java/cc/iotkit/common/oss/properties/OssProperties.java

@@ -0,0 +1,58 @@
+package cc.iotkit.common.oss.properties;
+
+import lombok.Data;
+
+/**
+ * OSS对象存储 配置属性
+ *
+ * @author Lion Li
+ */
+@Data
+public class OssProperties {
+
+    /**
+     * 访问站点
+     */
+    private String endpoint;
+
+    /**
+     * 自定义域名
+     */
+    private String domain;
+
+    /**
+     * 前缀
+     */
+    private String prefix;
+
+    /**
+     * ACCESS_KEY
+     */
+    private String accessKey;
+
+    /**
+     * SECRET_KEY
+     */
+    private String secretKey;
+
+    /**
+     * 存储空间名
+     */
+    private String bucketName;
+
+    /**
+     * 存储区域
+     */
+    private String region;
+
+    /**
+     * 是否https(Y=是,N=否)
+     */
+    private String isHttps;
+
+    /**
+     * 桶权限类型(0private 1public 2custom)
+     */
+    private String accessPolicy;
+
+}

+ 1 - 1
iot-module/iot-manager/src/main/java/cc/iotkit/manager/service/DataOwnerService.java

@@ -11,7 +11,7 @@ package cc.iotkit.manager.service;
 
 import cc.iotkit.common.enums.ErrCode;
 import cc.iotkit.common.exception.BizException;
-import cc.iotkit.data.manager.ICommonData;
+import cc.iotkit.data.ICommonData;
 import cc.iotkit.model.Owned;
 import cc.iotkit.model.device.DeviceInfo;
 import cc.iotkit.utils.AuthUtil;

+ 7 - 0
pom.xml

@@ -29,6 +29,7 @@
         <beanutils.version>1.9.3</beanutils.version>
         <jackson.version>2.13.1</jackson.version>
         <lang3.version>3.7</lang3.version>
+        <aws-java-sdk-s3.version>1.12.400</aws-java-sdk-s3.version>
         <io.version>2.11.0</io.version>
         <codec.version>1.14</codec.version>
         <hutool.version>5.8.18</hutool.version>
@@ -71,6 +72,12 @@
                 <version>${lang3.version}</version>
             </dependency>
 
+            <dependency>
+                <groupId>com.amazonaws</groupId>
+                <artifactId>aws-java-sdk-s3</artifactId>
+                <version>${aws-java-sdk-s3.version}</version>
+            </dependency>
+
             <dependency>
                 <groupId>commons-io</groupId>
                 <artifactId>commons-io</artifactId>