临时授权-私有桶与公有桶返回路径处理

This commit is contained in:
xudawei 2024-03-25 18:01:35 +08:00
parent f3cc4cfa1e
commit 8f8a720f6d
9 changed files with 78 additions and 14 deletions

View File

@ -33,7 +33,7 @@ public enum BucketTypeEnum {
/**
* 通过code获取枚举
*/
public static BucketTypeEnum getByCode(String channelCode) {
return channelCodeMap.get(channelCode);
public static BucketTypeEnum getByCode(String code) {
return channelCodeMap.get(code);
}
}

View File

@ -48,11 +48,17 @@ public enum CodeEnum implements EnumBase<Integer> {
MULTIPART_UPLOAD_ERROR(114, "文件上传失败"),
MULTIPART_UPLOAD_COMPLETE_ERROR(115, "文件上传失败"),
OBS_CLIENT_NULL(116,"obs client为空"),
CHANNEL_TYPE_NOT_EXIST(117,"渠道不存在"),
DELETE_FILE_FAIL(118,"删除文件失败"),
UPLOAD_SIGN_URL_FAIL(119,"上传临时授权获取SIGNURL失败"),
DOWNLOAD_SIGN_URL_FAIL(120,"下载临时授权获取SIGNURL失败"),
ICON_GROUP_EXIST(116, "图标组已存在"),
ICON_GROUP_NOT_EXIST(117, "图标组不存在"),
ICON_EXIST(118, "图标已存在"),
OBS_CLIENT_NULL(119,"obs client为空"),
CHANNEL_TYPE_NOT_EXIST(120,"渠道不存在"),
DELETE_FILE_FAIL(121,"删除文件失败"),
UPLOAD_SIGN_URL_FAIL(122,"上传临时授权获取SIGNURL失败"),
DOWNLOAD_SIGN_URL_FAIL(123,"下载临时授权获取SIGNURL失败"),
FILE_FORMAT_MAY_ERROR(124, "文件格式可能错误"),
FILE_APP_IS_EMPTY(125, "app is empty")
;

View File

@ -24,4 +24,9 @@ public interface AliOssService extends BaseS3Service {
* 删除文件
*/
void deleteFile(String bucketName, String key);
/**
* 获取url
*/
String getUrl(String bucketName, String tgtFileKey);
}

View File

@ -31,4 +31,9 @@ public interface HuaWeiCloudService {
* 删除File
*/
void deleteFile(String bucketName, String key);
/**
* 获取url
*/
String getUrl(String bucketName, String tgtFileKey);
}

View File

@ -75,7 +75,7 @@ public class AliOssServiceImpl implements AliOssService {
return getUrl(bucketName, tgtFileKey);
}
private String getUrl(String bucketName, String tgtFileKey) {
public String getUrl(String bucketName, String tgtFileKey) {
StringBuilder allBuilder = new StringBuilder();
allBuilder.append("https://");
allBuilder.append(bucketName);

View File

@ -292,4 +292,16 @@ public class HuaWeiCloudServiceImpl implements HuaWeiCloudService {
throw new BizException(CodeEnum.DELETE_FILE_FAIL);
}
}
public String getUrl(String bucketName, String tgtFileKey) {
StringBuilder allBuilder = new StringBuilder();
allBuilder.append("https://");
allBuilder.append(bucketName);
allBuilder.append(".");
allBuilder.append(huaWeiCloudObsClient.getEndpoint());
allBuilder.append("/");
allBuilder.append(tgtFileKey);
return allBuilder.toString();
}
}

View File

@ -2,6 +2,7 @@ package cn.axzo.oss.manager.api;
import cn.axzo.oss.manager.api.dto.PartETag;
import cn.axzo.oss.manager.api.dto.request.MultipartUploadDto;
import cn.axzo.oss.manager.api.dto.request.MultipartUploadFileDto;
import cn.axzo.oss.manager.api.vo.SignUrlUploadVo;
import org.springframework.web.multipart.MultipartFile;
@ -66,4 +67,9 @@ public interface FileManager {
* 删除File
*/
void deleteFile(String bucketName, String key, String channelCode);
/**
* 根据华为云/阿里云授权给第三方下载
*/
String fetchDownloadUrl(String bucketName, String key, String channelCode);
}

View File

@ -11,6 +11,7 @@ import cn.axzo.oss.integration.s3.HuaWeiCloudService;
import cn.axzo.oss.manager.api.FileManager;
import cn.axzo.oss.manager.api.dto.PartETag;
import cn.axzo.oss.manager.api.dto.request.MultipartUploadDto;
import com.obs.services.model.TemporarySignatureResponse;
import cn.axzo.oss.manager.api.vo.SignUrlUploadVo;
import com.obs.services.model.TemporarySignatureResponse;
import lombok.extern.slf4j.Slf4j;
@ -192,4 +193,21 @@ public class FileManagerImpl implements FileManager {
BizException.error(CodeEnum.CHANNEL_TYPE_NOT_EXIST);
}
}
/**
* 根据华为云/阿里云授权给第三方下载
*/
@Override
public String fetchDownloadUrl(String bucketName, String key, String channelCode) {
ChannelTypeEnum typeEnum = ChannelTypeEnum.getChannelTypeByChannelCode(channelCode);
switch (typeEnum) {
case OBS:// 华为云
return huaWeiCloudService.getUrl(bucketName, key);
case OSS:// 阿里云
return aliOssService.getUrl(bucketName, key);
default:
BizException.error(CodeEnum.CHANNEL_TYPE_NOT_EXIST);
}
return StringUtils.EMPTY;
}
}

View File

@ -148,7 +148,7 @@ public class FileServiceImpl implements FileService {
private void checkAppCode(final String appCode) {
log.info("checkAppCode appCode = {}", appCode);
FileApp fileApp = fileAppDao.getByAppCode(appCode);
BizException.error(Utility.objIsNotNull(fileApp), CodeEnum.APP_CODE_NOT_FOUND);
BizException.error(Utility.objIsNotNull(fileApp), CodeEnum.FILE_APP_IS_EMPTY);
}
/**
@ -752,11 +752,23 @@ public class FileServiceImpl implements FileService {
Long expire = bizSceneExpireMap.get(item.getAppChannelBucketNo());
// bucket下的key
String tgtFileKey = Utility.generateFileKey(item.getDirectory(), item.getFileUuid(), item.getFileFormat());
String signUrl = this.fileManager.signUrlDownload(item.getBucketName(), tgtFileKey, Objects.nonNull(expire) ? expire : SIGN_URL_DOWNLOAD_EXPIRE_SECOND , item.getChannelCode());
return SignUrlDownloadResponse.builder()
.signUrl(signUrl)
.fileKey(item.getFileUuid())
.build();
switch (BucketTypeEnum.getByCode(bucketTypeMap.get(item.getAppChannelBucketNo()))) {
case PUBLIC_BUCKET:
String url = this.fileManager.fetchDownloadUrl(item.getBucketName(), tgtFileKey, item.getChannelCode());
return SignUrlDownloadResponse.builder()
.signUrl(url)
.fileKey(item.getFileUuid())
.build();
case PRIVATE_BUCKET:
String signUrl = this.fileManager.signUrlDownload(item.getBucketName(), tgtFileKey, Objects.nonNull(expire) ? expire : SIGN_URL_DOWNLOAD_EXPIRE_SECOND , item.getChannelCode());
return SignUrlDownloadResponse.builder()
.signUrl(signUrl)
.fileKey(item.getFileUuid())
.build();
default:
BizException.error(CodeEnum.CHANNEL_TYPE_NOT_EXIST);
}
return SignUrlDownloadResponse.builder().build();
}).collect(Collectors.toList());
log.info("signUrl download end dto = {}, times:{}", JsonUtil.obj2Str(dto), System.currentTimeMillis() - start);
return responseList;