Quellcode durchsuchen

ObjectService 接口新增方法和实现

reghao vor 2 Jahren
Ursprung
Commit
7bc27e4244

+ 34 - 0
oss-api/src/main/java/cn/reghao/oss/api/dto/ObjectInfo.java

@@ -0,0 +1,34 @@
+package cn.reghao.oss.api.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+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;
+
+    private String objectId;
+    private String objectName;
+    private int fileType;
+    private String filename;
+    private long size;
+    private int width;
+    private int height;
+
+    public ObjectInfo(String objectId, String objectName, int fileType, String filename, long size) {
+        this.objectId = objectId;
+        this.objectName = objectName;
+        this.fileType = fileType;
+        this.filename = filename;
+        this.size = size;
+        this.width = 0;
+        this.height = 0;
+    }
+}

+ 22 - 0
oss-api/src/main/java/cn/reghao/oss/api/dto/ObjectUrl.java

@@ -0,0 +1,22 @@
+package cn.reghao.oss.api.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.io.Serializable;
+
+/**
+ * @author reghao
+ * @date 2023-11-29 16:58:06
+ */
+@AllArgsConstructor
+@Getter
+public class ObjectUrl implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String objectId;
+    private String objectName;
+    private int fileType;
+    private String url;
+    private String signedUrl;
+}

+ 3 - 3
oss-api/src/main/java/cn/reghao/oss/api/iface/ObjectService.java

@@ -1,8 +1,6 @@
 package cn.reghao.oss.api.iface;
 
-import cn.reghao.oss.api.dto.DownloadUrl;
-import cn.reghao.oss.api.dto.ObjectMeta;
-import cn.reghao.oss.api.dto.ObjectPrefix;
+import cn.reghao.oss.api.dto.*;
 
 import java.util.List;
 
@@ -15,4 +13,6 @@ public interface ObjectService {
     List<String> getObjectPrefix();
     ObjectMeta getObject(String objectName);
     DownloadUrl getDownloadUrl(String objectId, int channelId, long userId);
+    ObjectInfo getObjectInfo(String objectId);
+    ObjectUrl getObjectUrl(String objectId);
 }

+ 50 - 5
oss-store/src/main/java/cn/reghao/oss/store/rpc/ObjectServiceImpl.java

@@ -1,5 +1,8 @@
 package cn.reghao.oss.store.rpc;
 
+import cn.reghao.jutil.media.ImageOps;
+import cn.reghao.oss.api.constant.ObjectType;
+import cn.reghao.oss.api.dto.*;
 import cn.reghao.oss.store.db.repository.ObjectRepository;
 import cn.reghao.oss.store.model.po.FileMeta;
 import cn.reghao.oss.store.service.ObjectNameService;
@@ -7,15 +10,13 @@ import cn.reghao.oss.store.util.JwtUtil;
 import cn.reghao.oss.store.util.SignatureUtil;
 import cn.reghao.oss.api.constant.ChannelAction;
 import cn.reghao.oss.api.constant.UploadChannel;
-import cn.reghao.oss.api.dto.DownloadUrl;
-import cn.reghao.oss.api.dto.ObjectMeta;
-import cn.reghao.oss.api.dto.ObjectPrefix;
-import cn.reghao.oss.api.dto.OssPayload;
 import cn.reghao.oss.api.iface.ObjectService;
 import cn.reghao.oss.store.db.mapper.FileMetaMapper;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.stereotype.Service;
 
+import java.io.File;
+import java.io.IOException;
 import java.util.List;
 import java.util.UUID;
 
@@ -29,12 +30,14 @@ public class ObjectServiceImpl implements ObjectService {
     private final FileMetaMapper fileMetaMapper;
     private final ObjectNameService objectNameService;
     private final ObjectRepository objectRepository;
+    private final SignService signService;
 
     public ObjectServiceImpl(FileMetaMapper fileMetaMapper, ObjectNameService objectNameService,
-                             ObjectRepository objectRepository) {
+                             ObjectRepository objectRepository, SignService signService) {
         this.fileMetaMapper = fileMetaMapper;
         this.objectNameService = objectNameService;
         this.objectRepository = objectRepository;
+        this.signService = signService;
     }
 
     @Override
@@ -81,4 +84,46 @@ public class ObjectServiceImpl implements ObjectService {
         String sign = SignatureUtil.sign(requestString, secretKey);
         return String.format("%s?token=%s&t=%s&nonce=%s&sign=%s", url, token, timestamp, nonce, sign);
     }
+
+    @Override
+    public ObjectInfo getObjectInfo(String objectId) {
+        FileMeta fileMeta = fileMetaMapper.findByObjectId(objectId);
+        if (fileMeta == null) {
+            return null;
+        }
+
+        String objectName = fileMeta.getObjectName();
+        int fileType = fileMeta.getFileType();
+        String filename = fileMeta.getFilename();
+        long size = fileMeta.getSize();
+        ObjectInfo objectInfo = new ObjectInfo(objectId, objectName, fileType, filename, size);
+        if (fileType == 1001) {
+            ObjectMeta objectMeta = objectRepository.getObjectMetaById(objectId);
+            String absolutePath = objectMeta.getAbsolutePath();
+            try {
+                ImageOps.Size resolution = ImageOps.info(new File(absolutePath));
+                objectInfo.setWidth(resolution.getWidth());
+                objectInfo.setHeight(resolution.getHeight());
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+
+        return objectInfo;
+    }
+
+    @Override
+    public ObjectUrl getObjectUrl(String objectId) {
+        FileMeta fileMeta = fileMetaMapper.findByObjectId(objectId);
+        if (fileMeta == null) {
+            return null;
+        }
+
+        String objectName = fileMeta.getObjectName();
+        String url = String.format("//oss.reghao.cn/%s", objectName);
+        int fileType = fileMeta.getFileType();
+        String signedUrl = signService.getSignedUrl(10001, url, ObjectType.Other.getCode(), 3600);
+        ObjectUrl objectUrl = new ObjectUrl(objectId, objectName, fileType, url, signedUrl);
+        return objectUrl;
+    }
 }

+ 2 - 0
oss-store/src/main/java/cn/reghao/oss/store/rpc/SignService.java

@@ -31,6 +31,8 @@ public class SignService {
             ossPayload = new OssPayload(action, UploadChannel.video.getCode(), loginUser);
         } else if (contentType == ObjectType.Audio.getCode()) {
             ossPayload = new OssPayload(action, UploadChannel.audio.getCode(), loginUser);
+        } else if (contentType == ObjectType.Other.getCode()) {
+            ossPayload = new OssPayload(action, UploadChannel.disk.getCode(), loginUser);
         }
 
         String token = JwtUtil.createToken(ossPayload, timestamp, secretKey);