Explorar o código

云端录制的回调url设置成公开

zouxuan %!s(int64=3) %!d(string=hai) anos
pai
achega
3aa99470fe

+ 5 - 1
mec-im/src/main/java/com/ym/service/Impl/LiveRoomServiceImpl.java

@@ -8,6 +8,8 @@ import com.ym.mec.biz.service.ImLiveRoomVideoService;
 import com.ym.mec.common.entity.ImRoomMessage;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.im.IMHelper;
+import com.ym.mec.thirdparty.storage.StoragePluginContext;
+import com.ym.mec.thirdparty.storage.provider.KS3StoragePlugin;
 import com.ym.pojo.IMApiResultInfo;
 import com.ym.pojo.IMUserOnlineInfo;
 import com.ym.pojo.RecordConfig;
@@ -40,6 +42,8 @@ public class LiveRoomServiceImpl implements LiveRoomService {
     private RedissonClient redissonClient;
     @Autowired
     private ImLiveRoomVideoService imLiveRoomVideoService;
+    @Autowired
+    private StoragePluginContext storagePluginContext;
 
     /**
      * 创建房间-聊天室
@@ -158,7 +162,7 @@ public class LiveRoomServiceImpl implements LiveRoomService {
         if (recordNotify.getCode().equals(200)) {
             if (Objects.nonNull(recordNotify.getType()) && recordNotify.getType() == 4) {
                 //云端录制文件地址
-                String fileUrl = recordNotify.getOutput().getFileUrl();
+                String fileUrl = storagePluginContext.getPublicUrl(recordNotify.getOutput().getFileUrl());
                 String roomId = recordNotify.getRoomId();
                 //写入数据库
                 try {

+ 12 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/StoragePlugin.java

@@ -32,4 +32,16 @@ public interface StoragePlugin {
 	 * @throws IOException
 	 */
 	byte[] getFile(String folderName, String fileName) throws IOException;
+
+	/**
+	 * @describe 设置文件访问为私有或公开
+	 * @apiNote 时光荏苒,认真工作的时间总是过得很快,而我、享受这一刻!
+	 * @author zx
+	 * @date 2022/7/13
+	 * @time 11:35
+	 * @param fileName:
+	 * @param isPublic:
+	 * @return void
+	 */
+	void setFileAcl(String fileName,Boolean isPublic);
 }

+ 18 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/StoragePluginContext.java

@@ -4,6 +4,7 @@ import java.io.File;
 import java.util.HashMap;
 import java.util.Map;
 
+import com.ym.mec.thirdparty.storage.provider.KS3StoragePlugin;
 import org.springframework.stereotype.Component;
 
 import com.ym.mec.thirdparty.exception.ThirdpartyException;
@@ -30,6 +31,23 @@ public class StoragePluginContext {
 		return StoragePlugin.asyncUploadFile(folderName, file, delLocalFile);
 	}
 
+	public void setFileAcl(String storagePluginName,String fileName,Boolean isPublic){
+		StoragePlugin storagePlugin = getStoragePlugin(storagePluginName);
+		storagePlugin.setFileAcl(fileName,isPublic);
+	}
+
+	public String getPublicUrl(String fileName){
+		try {
+			String substring = fileName.substring(0, fileName.lastIndexOf("?"));
+			String substring1 = substring.substring(substring.lastIndexOf("/") + 1);
+			this.setFileAcl(KS3StoragePlugin.PLUGIN_NAME,substring1,true);
+			return substring;
+		}catch (Exception e) {
+			e.printStackTrace();
+		}
+		return fileName;
+	}
+
 	private StoragePlugin getStoragePlugin(String storagePluginName) {
 		StoragePlugin storagePlugin = mapper.get(storagePluginName);
 

+ 6 - 1
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/provider/AliyunOssStoragePlugin.java

@@ -120,7 +120,12 @@ public class AliyunOssStoragePlugin implements StoragePlugin, InitializingBean,
 		}
 	}
 
-	@Override
+    @Override
+    public void setFileAcl(String fileName, Boolean isPublic) {
+		return;
+    }
+
+    @Override
 	public void destroy() throws Exception {
 		if (ossClient != null) {
 			ossClient.shutdown();

+ 14 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/provider/KS3StoragePlugin.java

@@ -3,6 +3,7 @@ package com.ym.mec.thirdparty.storage.provider;
 import java.io.File;
 import java.io.IOException;
 
+import com.ksyun.ks3.service.request.PutObjectACLRequest;
 import org.apache.commons.io.FileUtils;
 import org.apache.poi.util.IOUtils;
 import org.springframework.beans.factory.DisposableBean;
@@ -139,6 +140,19 @@ public class KS3StoragePlugin implements StoragePlugin, InitializingBean, Dispos
 	}
 
 	@Override
+	public void setFileAcl(String fileName, Boolean isPublic) {
+		PutObjectACLRequest request = new PutObjectACLRequest(bucketName,fileName);
+		if (isPublic){
+			//设为公开读
+			request.setCannedAcl(CannedAccessControlList.PublicRead);
+		}else {
+			//设为私有
+			request.setCannedAcl(CannedAccessControlList.Private);
+		}
+		client.putObjectACL(request);
+	}
+
+	@Override
 	public void destroy() throws Exception {
 	}