add(req-2080):上传文件到华为云--代码优化
This commit is contained in:
parent
62ba3df5b1
commit
a1ff428e47
@ -9,7 +9,9 @@ import java.io.InputStream;
|
||||
* @since 2024/1/15 11:37
|
||||
**/
|
||||
public interface HuaWeiCloudService {
|
||||
String uploadByStream(String bucketName, String tgtFileKey, String fileName, String appCode, InputStream srcStream);
|
||||
String uploadFile(String bucketName, String fileName, String appCode, InputStream srcStream);
|
||||
|
||||
String checkPointUploadFile(String bucketName, String fileName, String appCode, InputStream srcStream);
|
||||
|
||||
String multipartUpload(String bucketName, String fileName, String appCode, InputStream srcStream);
|
||||
}
|
||||
|
||||
@ -29,8 +29,17 @@ public class HuaWeiCloudServiceImpl implements HuaWeiCloudService {
|
||||
@Autowired
|
||||
private HuaWeiCloudObsClient huaWeiCloudObsClient;
|
||||
|
||||
/**
|
||||
* 上传文件到OBS:普通方式
|
||||
*
|
||||
* @param bucketName 桶名称
|
||||
* @param fileName 文件名
|
||||
* @param appCode 应用编码
|
||||
* @param srcStream 文件流
|
||||
* @return fileUrl
|
||||
*/
|
||||
@Override
|
||||
public String uploadByStream(String bucketName, String tgtFileKey, String fileName, String appCode, InputStream srcStream) {
|
||||
public String uploadFile(String bucketName, String fileName, String appCode, InputStream srcStream) {
|
||||
ObsClient obsClient = huaWeiCloudObsClient.getClient();
|
||||
|
||||
// 创建文件夹
|
||||
@ -44,11 +53,6 @@ public class HuaWeiCloudServiceImpl implements HuaWeiCloudService {
|
||||
request.setInput(srcStream);
|
||||
request.setIsEncodeHeaders(true);
|
||||
PutObjectResult putObjectResult = obsClient.putObject(bucketName, objectKey, srcStream);
|
||||
|
||||
// 断点续传
|
||||
/*CompleteMultipartUploadResult completeMultipartUploadResult =
|
||||
this.uploadFile(obsClient, bucketName, objectKey, fileName);*/
|
||||
|
||||
return putObjectResult.getObjectUrl();
|
||||
} else {
|
||||
// 创建上传文件的元信息,通过文件云信息设置HTTP Header
|
||||
@ -57,7 +61,6 @@ public class HuaWeiCloudServiceImpl implements HuaWeiCloudService {
|
||||
metadata.setContentDisposition("attachment;filename=\"" + URLEncoder.encode(fileName, "utf-8") + "\"");
|
||||
metadata.setContentEncoding("utf-8");
|
||||
PutObjectResult putObjectResult = obsClient.putObject(bucketName, objectKey, srcStream, metadata);
|
||||
|
||||
return putObjectResult.getObjectUrl();
|
||||
}
|
||||
} catch (ObsException exception) {
|
||||
@ -69,6 +72,55 @@ public class HuaWeiCloudServiceImpl implements HuaWeiCloudService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传文件到OBS:断点续传
|
||||
*
|
||||
* @param bucketName 桶名称
|
||||
* @param fileName 文件名
|
||||
* @param appCode 应用编码
|
||||
* @param srcStream 文件流
|
||||
* @return fileUrl
|
||||
*/
|
||||
@Override
|
||||
public String checkPointUploadFile(String bucketName, String fileName, String appCode, InputStream srcStream) {
|
||||
ObsClient obsClient = huaWeiCloudObsClient.getClient();
|
||||
|
||||
// 创建文件夹
|
||||
String objectKey = appCode + "/" + fileName;
|
||||
try {
|
||||
if (APPCODE_CMS.equals(appCode)) {
|
||||
// 断点续传
|
||||
CompleteMultipartUploadResult completeMultipartUploadResult =
|
||||
this.uploadFile(obsClient, bucketName, objectKey, fileName, null);
|
||||
return completeMultipartUploadResult.getObjectUrl();
|
||||
} else {
|
||||
// 创建上传文件的元信息,通过文件云信息设置HTTP Header
|
||||
ObjectMetadata metadata = new ObjectMetadata();
|
||||
// 设置内容被下载时的名称
|
||||
metadata.setContentDisposition("attachment;filename=\"" + URLEncoder.encode(fileName, "utf-8") + "\"");
|
||||
metadata.setContentEncoding("utf-8");
|
||||
CompleteMultipartUploadResult completeMultipartUploadResult =
|
||||
this.uploadFile(obsClient, bucketName, objectKey, fileName, metadata);
|
||||
return completeMultipartUploadResult.getObjectUrl();
|
||||
}
|
||||
} catch (ObsException exception) {
|
||||
LogUtil.error("uploadByStream ObsException", exception);
|
||||
return "";
|
||||
} catch (Exception e) {
|
||||
LogUtil.error("uploadByStream ClientException", e);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传文件到OBS:分段上传
|
||||
*
|
||||
* @param bucketName 桶名称
|
||||
* @param fileName 文件名
|
||||
* @param appCode 应用编码
|
||||
* @param srcStream 文件流
|
||||
* @return fileUrl
|
||||
*/
|
||||
@Override
|
||||
public String multipartUpload(String bucketName, String fileName, String appCode, InputStream srcStream) {
|
||||
|
||||
@ -145,16 +197,20 @@ public class HuaWeiCloudServiceImpl implements HuaWeiCloudService {
|
||||
|
||||
// 断点续传
|
||||
private CompleteMultipartUploadResult uploadFile(ObsClient obsClient, String bucketName, String objectKey,
|
||||
String fileName) {
|
||||
String fileName, ObjectMetadata metadata) {
|
||||
UploadFileRequest request = new UploadFileRequest(bucketName, objectKey, fileName);
|
||||
// 设置待上传的本地文件,fileName为待上传的本地文件路径,需要指定到具体带文件后缀的文件名
|
||||
request.setUploadFile(fileName);
|
||||
request.setUploadFile(objectKey);
|
||||
// 设置分段上传时的最大并发数
|
||||
request.setTaskNum(5);
|
||||
// 设置分段大小为10MB
|
||||
request.setPartSize(10 * 1024 * 1024);
|
||||
// 开启断点续传模式
|
||||
request.setEnableCheckpoint(true);
|
||||
// 开启请求头域自动编码
|
||||
request.setIsEncodeHeaders(true);
|
||||
// 对象元数据
|
||||
request.setObjectMetadata(metadata);
|
||||
return obsClient.uploadFile(request);
|
||||
}
|
||||
|
||||
|
||||
@ -2,6 +2,7 @@ package cn.axzo.oss.manager.impl;
|
||||
|
||||
import cn.axzo.oss.common.enums.ChannelTypeEnum;
|
||||
import cn.axzo.oss.common.enums.FileUploadTypeEnum;
|
||||
import cn.axzo.oss.common.enums.StorageUnitEnum;
|
||||
import cn.axzo.oss.common.utils.BeanConvertUtil;
|
||||
import cn.axzo.oss.integration.s3.AliOssService;
|
||||
import cn.axzo.oss.integration.s3.HuaWeiCloudService;
|
||||
@ -57,12 +58,27 @@ public class FileManagerImpl implements FileManager {
|
||||
InputStream inputStream = new ByteArrayInputStream(fileContent);
|
||||
|
||||
if (channelType.equals(ChannelTypeEnum.OBS.getCode())) {
|
||||
// 断点续传长度限制:断点续传上传接口传入的文件大小至少要100K以上
|
||||
if (fileUploadType.equals(FileUploadTypeEnum.CHECK_POINT.getCode())) {
|
||||
return huaWeiCloudService.uploadByStream(bulkName, keyPath, fileName, appCode, inputStream);
|
||||
int checkPointLengthLimit = StorageUnitEnum.KB.getSize() * 100;
|
||||
int fileLength = fileContent.length;
|
||||
if (fileLength < checkPointLengthLimit) {
|
||||
fileUploadType = FileUploadTypeEnum.DEFAULT_UPLOAD.getCode();
|
||||
}
|
||||
}
|
||||
|
||||
// 上传文件到OBS
|
||||
if (fileUploadType.equals(FileUploadTypeEnum.DEFAULT_UPLOAD.getCode())) {
|
||||
return huaWeiCloudService.uploadFile(bulkName, fileName, appCode, inputStream);
|
||||
} else if (fileUploadType.equals(FileUploadTypeEnum.CHECK_POINT.getCode())) {
|
||||
return huaWeiCloudService.checkPointUploadFile(bulkName, fileName, appCode, inputStream);
|
||||
} else {
|
||||
return huaWeiCloudService.multipartUpload(bulkName, fileName, appCode, inputStream);
|
||||
}
|
||||
} else {
|
||||
}
|
||||
|
||||
// 上传文件到阿里云
|
||||
else {
|
||||
return aliOssService.uploadByStream(bulkName, keyPath, fileName, appCode, inputStream);
|
||||
}
|
||||
}
|
||||
|
||||
@ -574,22 +574,13 @@ public class FileServiceImpl implements FileService {
|
||||
Integer fileUploadType) {
|
||||
|
||||
// 判断容量
|
||||
String fileConform = isFileConform(fileUploadConfig, dto.getFileContent().length,
|
||||
dto.getFileName());
|
||||
|
||||
String fileUrl = null;
|
||||
String fileConform = isFileConform(fileUploadConfig, dto.getFileContent().length, dto.getFileName());
|
||||
String uuid = Utility.getUUID();
|
||||
// 生成上传文件的唯一key
|
||||
String tgtFileKey = Utility.generateFileKey(fileUploadConfig.getDirectory(), uuid, fileConform);
|
||||
|
||||
// 上传文件
|
||||
if (channelType.equals(ChannelTypeEnum.OBS.getCode())) {
|
||||
fileUrl = fileManager.uploadByStream(fileUploadConfig.getBucketName(), tgtFileKey, dto.getFileName(),
|
||||
dto.getAppCode(), dto.getFileContent(), channelType, fileUploadType);
|
||||
} else {
|
||||
fileUrl = fileManager.uploadByStream(fileUploadConfig.getBucketName(), tgtFileKey, dto.getFileName(),
|
||||
dto.getAppCode(), dto.getFileContent(), channelType, fileUploadType);
|
||||
}
|
||||
String fileUrl = fileManager.uploadByStream(fileUploadConfig.getBucketName(), tgtFileKey, dto.getFileName(),
|
||||
dto.getAppCode(), dto.getFileContent(), channelType, fileUploadType);
|
||||
|
||||
// 保存失败
|
||||
if (Utility.isBlank(fileUrl)) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user