浏览代码

update oss

reghao 1 年之前
父节点
当前提交
db2dee4568

+ 6 - 2
oss-api/src/main/java/cn/reghao/oss/api/dto/ObjectInfo.java

@@ -1,7 +1,6 @@
 package cn.reghao.oss.api.dto;
 
 import lombok.Getter;
-import lombok.Setter;
 
 import java.io.Serializable;
 
@@ -9,7 +8,6 @@ import java.io.Serializable;
  * @author reghao
  * @date 2023-11-29 18:11:13
  */
-@Setter
 @Getter
 public class ObjectInfo implements Serializable {
     private static final long serialVersionUID = 1L;
@@ -19,6 +17,7 @@ public class ObjectInfo implements Serializable {
     private int fileType;
     private String filename;
     private long size;
+    private String url;
 
     public ObjectInfo(String objectId, String objectName, int fileType, String filename, long size) {
         this.objectId = objectId;
@@ -26,5 +25,10 @@ public class ObjectInfo implements Serializable {
         this.fileType = fileType;
         this.filename = filename;
         this.size = size;
+        this.url = objectName;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
     }
 }

+ 4 - 0
oss-api/src/main/java/cn/reghao/oss/api/dto/media/AudioInfo.java

@@ -21,4 +21,8 @@ public class AudioInfo implements Serializable {
     private String codec;
     private Long bitRate;
     private String url;
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
 }

+ 4 - 0
oss-api/src/main/java/cn/reghao/oss/api/dto/media/ConvertedImageInfo.java

@@ -18,4 +18,8 @@ public class ConvertedImageInfo implements Serializable {
     private String objectId;
     private String format;
     private String url;
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
 }

+ 4 - 0
oss-api/src/main/java/cn/reghao/oss/api/dto/media/ImageInfo.java

@@ -21,4 +21,8 @@ public class ImageInfo implements Serializable {
     private String url;
     private Integer width;
     private Integer height;
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
 }

+ 4 - 0
oss-api/src/main/java/cn/reghao/oss/api/dto/media/VideoInfo.java

@@ -29,4 +29,8 @@ public class VideoInfo implements Serializable {
     // 单位秒
     private Integer duration;
     private LocalDateTime createTime;
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
 }

+ 2 - 2
oss-api/src/main/java/cn/reghao/oss/api/iface/StoreService.java

@@ -17,13 +17,13 @@ import cn.reghao.oss.api.dto.media.VideoInfo;
 public interface StoreService {
     void createChannel(String channelPrefix);
     StoreInfo getStoreInfo();
-    String getUploadToken(int channelId, int loginUser);
+    String getUploadToken(int channelId, int loginUser, int expire);
 
     void setObjectScope(String objectId, int scope);
     void deleteByObjectId(String objectId);
     void deleteByObjectUrl(String objectUrl);
     ObjectInfo getObjectInfo(String objectId);
-    String getSignedUrl(String domain, int loginUser, String objectId);
+    String getSignedUrl(String domain, int loginUser, String objectId, int expire);
 
     VideoInfo getVideoInfo(String objectId);
     ImageInfo getImageInfo(String objectId);

+ 3 - 7
oss-console/src/main/java/cn/reghao/oss/console/app/rpc/ConsoleServiceImpl.java

@@ -89,14 +89,10 @@ public class ConsoleServiceImpl implements ConsoleService {
 
         StoreNode storeNode = storeNodeService.getById(userNode.getNodeId());
         StoreService storeService = rpcService.getStoreService(storeNode);
-        String uploadToken = storeService.getUploadToken(channelId, loginUser);
-        /*String secretKey = RandomString.getString(128);
-        String action = ChannelAction.upload.getName();
-        long expireAt = System.currentTimeMillis() + 3600*1000;
-        OssPayload ossPayload = new OssPayload(action, channelId, loginUser);
-        String uploadToken = JwtUtil.createToken(ossPayload, expireAt, secretKey);
-        cache.put(uploadToken, secretKey);*/
 
+        // 多少秒后 token 过期
+        int expire = 3600;
+        String uploadToken = storeService.getUploadToken(channelId, loginUser, expire);
         return new ServerInfo(ossUrl, channelId, maxSize, uploadToken);
     }
 }

+ 38 - 3
oss-console/src/main/java/cn/reghao/oss/console/app/rpc/StoreServiceWrapperImpl.java

@@ -130,9 +130,15 @@ public class StoreServiceWrapperImpl implements StoreServiceWrapper {
     public ObjectInfo getObjectInfo(int channelId, String objectId) {
         try {
             StoreService storeService = getStoreService(channelId);
-            int loginUser = AuthContext.getUserId();
             int expireSecond = 3600;
             ObjectInfo objectInfo = storeService.getObjectInfo(objectId);
+            if (objectInfo != null) {
+                int loginUser = AuthContext.getUserId();
+                String domain = userNodeService.getDomain(channelId, loginUser);
+                String url = String.format("//%s/%s", domain, objectInfo.getUrl());
+                objectInfo.setUrl(url);
+            }
+
             return objectInfo;
         } catch (Exception e) {
             e.printStackTrace();
@@ -147,7 +153,9 @@ public class StoreServiceWrapperImpl implements StoreServiceWrapper {
         String domain = userNodeService.getDomain(channelId, loginUser);
         try {
             StoreService storeService = getStoreService(channelId);
-            return storeService.getSignedUrl(domain, loginUser, objectId);
+            // 多少秒后 url 过期
+            int expire = 3600;
+            return storeService.getSignedUrl(domain, loginUser, objectId, expire);
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -160,6 +168,13 @@ public class StoreServiceWrapperImpl implements StoreServiceWrapper {
         try {
             StoreService storeService = getStoreService(channelId);
             VideoInfo videoInfo = storeService.getVideoInfo(videoFileId);
+            if (videoInfo != null) {
+                int loginUser = AuthContext.getUserId();
+                String domain = userNodeService.getDomain(channelId, loginUser);
+                String url = String.format("//%s/%s", domain, videoInfo.getUrl());
+                videoInfo.setUrl(url);
+            }
+
             return videoInfo;
         } catch (Exception e) {
             e.printStackTrace();
@@ -173,6 +188,13 @@ public class StoreServiceWrapperImpl implements StoreServiceWrapper {
         try {
             StoreService storeService = getStoreService(channelId);
             ImageInfo imageInfo = storeService.getImageInfo(imageFileId);
+            if (imageInfo != null) {
+                int loginUser = AuthContext.getUserId();
+                String domain = userNodeService.getDomain(channelId, loginUser);
+                String url = String.format("//%s/%s", domain, imageInfo.getUrl());
+                imageInfo.setUrl(url);
+            }
+
             return imageInfo;
         } catch (Exception e) {
             e.printStackTrace();
@@ -184,9 +206,15 @@ public class StoreServiceWrapperImpl implements StoreServiceWrapper {
     @Override
     public ConvertedImageInfo getWebpInfo(int channelId, String imageFileId) {
         try {
-            int loginUser = AuthContext.getUserId();
             StoreService storeService = getStoreService(channelId);
             ConvertedImageInfo convertedImageInfo = storeService.getWebpInfo(imageFileId);
+            if (convertedImageInfo != null) {
+                int loginUser = AuthContext.getUserId();
+                String domain = userNodeService.getDomain(channelId, loginUser);
+                String url = String.format("//%s/%s", domain, convertedImageInfo.getUrl());
+                convertedImageInfo.setUrl(url);
+            }
+
             return convertedImageInfo;
         } catch (Exception e) {
             e.printStackTrace();
@@ -200,6 +228,13 @@ public class StoreServiceWrapperImpl implements StoreServiceWrapper {
         try {
             StoreService storeService = getStoreService(channelId);
             AudioInfo audioInfo = storeService.getAudioInfo(audioFileId);
+            if (audioInfo != null) {
+                int loginUser = AuthContext.getUserId();
+                String domain = userNodeService.getDomain(channelId, loginUser);
+                String url = String.format("//%s/%s", domain, audioInfo.getUrl());
+                audioInfo.setUrl(url);
+            }
+
             return audioInfo;
         } catch (Exception e) {
             e.printStackTrace();

+ 27 - 1
oss-store/src/main/java/cn/reghao/oss/store/config/BeansConfig.java

@@ -2,7 +2,9 @@ package cn.reghao.oss.store.config;
 
 import cn.reghao.oss.api.iface.ConsoleService;
 import cn.reghao.oss.store.config.props.OssProperties;
-import cn.reghao.oss.store.rpc.RemoteService;
+import org.apache.dubbo.config.ApplicationConfig;
+import org.apache.dubbo.config.ConsumerConfig;
+import org.apache.dubbo.config.ReferenceConfig;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
@@ -19,4 +21,28 @@ public class BeansConfig {
         int port = ossProperties.getConsolePort();
         return remoteService.getService(host, port, ConsoleService.class);
     }
+
+    static class RemoteService<T> {
+        public T getService(String host, int port, Class<T> clazz) {
+            String serviceName = "remote-service";
+            String dubboUrl = String.format("dubbo://%s:%s/%s", host, port, clazz.getName());
+
+            // 当前应用配置
+            ApplicationConfig application = new ApplicationConfig();
+            application.setName(serviceName);
+
+            ConsumerConfig consumerConfig = new ConsumerConfig();
+            consumerConfig.setTimeout(60_000);
+
+            // 注意:ReferenceConfig为重对象,内部封装了与注册中心的连接,以及与服务提供方的连接
+            // 引用远程服务
+            // 此实例很重,封装了与注册中心的连接以及与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏
+            ReferenceConfig<T> reference = new ReferenceConfig<>();
+            reference.setApplication(application);
+            reference.setInterface(clazz);
+            reference.setUrl(dubboUrl);
+            reference.setConsumer(consumerConfig);
+            return reference.get();
+        }
+    }
 }

+ 0 - 33
oss-store/src/main/java/cn/reghao/oss/store/rpc/RemoteService.java

@@ -1,33 +0,0 @@
-package cn.reghao.oss.store.rpc;
-
-import org.apache.dubbo.config.ApplicationConfig;
-import org.apache.dubbo.config.ConsumerConfig;
-import org.apache.dubbo.config.ReferenceConfig;
-
-/**
- * @author reghao
- * @date 2024-02-23 13:19:20
- */
-public class RemoteService<T> {
-    public T getService(String host, int port, Class<T> clazz) {
-        String serviceName = "remote-service";
-        String dubboUrl = String.format("dubbo://%s:%s/%s", host, port, clazz.getName());
-
-        // 当前应用配置
-        ApplicationConfig application = new ApplicationConfig();
-        application.setName(serviceName);
-
-        ConsumerConfig consumerConfig = new ConsumerConfig();
-        consumerConfig.setTimeout(60_000);
-
-        // 注意:ReferenceConfig为重对象,内部封装了与注册中心的连接,以及与服务提供方的连接
-        // 引用远程服务
-        // 此实例很重,封装了与注册中心的连接以及与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏
-        ReferenceConfig<T> reference = new ReferenceConfig<>();
-        reference.setApplication(application);
-        reference.setInterface(clazz);
-        reference.setUrl(dubboUrl);
-        reference.setConsumer(consumerConfig);
-        return reference.get();
-    }
-}

+ 3 - 4
oss-store/src/main/java/cn/reghao/oss/store/rpc/StoreServiceImpl.java

@@ -68,10 +68,10 @@ public class StoreServiceImpl implements StoreService {
     }
 
     @Override
-    public String getUploadToken(int channelId, int loginUser) {
+    public String getUploadToken(int channelId, int loginUser, int expire) {
         String secretKey = RandomString.getString(128);
         String action = ChannelAction.upload.getName();
-        long expireAt = System.currentTimeMillis() + 3600*1000;
+        long expireAt = System.currentTimeMillis() + expire*1000L;
         OssPayload ossPayload = new OssPayload(action, channelId, loginUser);
         String uploadToken = JwtUtil.createToken(ossPayload, expireAt, secretKey);
         cache.put(uploadToken, secretKey);
@@ -112,8 +112,7 @@ public class StoreServiceImpl implements StoreService {
     }
 
     @Override
-    public String getSignedUrl(String domain, int loginUser, String objectId) {
-        int expire = 3600;
+    public String getSignedUrl(String domain, int loginUser, String objectId, int expire) {
         ObjectMeta objectMeta = objectRepository.getObjectMetaById(objectId);
         String url = String.format("//%s/%s", domain, objectMeta.getObjectName());
         return signService.getSignedUrl(loginUser, url, expire);