diff --git a/oss-client/src/main/java/cn/axzo/oss/client/controller/WebFileController.java b/oss-client/src/main/java/cn/axzo/oss/client/controller/WebFileController.java index 8e6e261..c986f41 100644 --- a/oss-client/src/main/java/cn/axzo/oss/client/controller/WebFileController.java +++ b/oss-client/src/main/java/cn/axzo/oss/client/controller/WebFileController.java @@ -205,12 +205,14 @@ public class WebFileController { } String filename = file.getOriginalFilename(); + String filePath = fileService.getFilePath(file); BizException.error(filename.length() < FILE_NAME_MAX_LENGTH, FILE_NAME_TOO_LONG); ServerFileUploadDto fileUploadDto = ServerFileUploadDto.builder() .appCode(appCode) .bizScene(bizScene) .fileName(filename) .fileContent(file.getBytes()) + .filePath(filePath) .build(); ServerFileUploadResponse response = fileService.uploadObs(fileUploadDto, liteSaasContext, FileUploadTypeEnum.CHECK_POINT.getCode()); diff --git a/oss-integration/src/main/java/cn/axzo/oss/integration/s3/HuaWeiCloudService.java b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/HuaWeiCloudService.java index bceda81..ee7a484 100644 --- a/oss-integration/src/main/java/cn/axzo/oss/integration/s3/HuaWeiCloudService.java +++ b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/HuaWeiCloudService.java @@ -11,7 +11,7 @@ import java.io.InputStream; public interface HuaWeiCloudService { String uploadFile(String bucketName, String fileName, String appCode, InputStream srcStream); - String checkPointUploadFile(String bucketName, String fileName, String appCode, InputStream srcStream); + String checkPointUploadFile(String bucketName, String fileName, String appCode, InputStream srcStream, String filePath); String multipartUpload(String bucketName, String fileName, String appCode, InputStream srcStream); } diff --git a/oss-integration/src/main/java/cn/axzo/oss/integration/s3/impl/HuaWeiCloudServiceImpl.java b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/impl/HuaWeiCloudServiceImpl.java index b869a47..0508dd5 100644 --- a/oss-integration/src/main/java/cn/axzo/oss/integration/s3/impl/HuaWeiCloudServiceImpl.java +++ b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/impl/HuaWeiCloudServiceImpl.java @@ -82,7 +82,7 @@ public class HuaWeiCloudServiceImpl implements HuaWeiCloudService { * @return fileUrl */ @Override - public String checkPointUploadFile(String bucketName, String fileName, String appCode, InputStream srcStream) { + public String checkPointUploadFile(String bucketName, String fileName, String appCode, InputStream srcStream, String filePath) { ObsClient obsClient = huaWeiCloudObsClient.getClient(); // 创建文件夹 @@ -91,7 +91,7 @@ public class HuaWeiCloudServiceImpl implements HuaWeiCloudService { if (APPCODE_CMS.equals(appCode)) { // 断点续传 CompleteMultipartUploadResult completeMultipartUploadResult = - this.uploadFile(obsClient, bucketName, objectKey, fileName, null); + this.uploadFile(obsClient, bucketName, objectKey, fileName, null, filePath); return completeMultipartUploadResult.getObjectUrl(); } else { // 创建上传文件的元信息,通过文件云信息设置HTTP Header @@ -100,7 +100,7 @@ public class HuaWeiCloudServiceImpl implements HuaWeiCloudService { metadata.setContentDisposition("attachment;filename=\"" + URLEncoder.encode(fileName, "utf-8") + "\""); metadata.setContentEncoding("utf-8"); CompleteMultipartUploadResult completeMultipartUploadResult = - this.uploadFile(obsClient, bucketName, objectKey, fileName, metadata); + this.uploadFile(obsClient, bucketName, objectKey, fileName, metadata, filePath); return completeMultipartUploadResult.getObjectUrl(); } } catch (ObsException exception) { @@ -197,10 +197,10 @@ public class HuaWeiCloudServiceImpl implements HuaWeiCloudService { // 断点续传 private CompleteMultipartUploadResult uploadFile(ObsClient obsClient, String bucketName, String objectKey, - String fileName, ObjectMetadata metadata) { + String fileName, ObjectMetadata metadata, String filePath) { UploadFileRequest request = new UploadFileRequest(bucketName, objectKey, fileName); // 设置待上传的本地文件,fileName为待上传的本地文件路径,需要指定到具体带文件后缀的文件名 - request.setUploadFile(objectKey); + request.setUploadFile(filePath); // 设置分段上传时的最大并发数 request.setTaskNum(5); // 设置分段大小为10MB diff --git a/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/FileManager.java b/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/FileManager.java index 6d00c6a..3ac0ec1 100644 --- a/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/FileManager.java +++ b/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/FileManager.java @@ -34,7 +34,7 @@ public interface FileManager { * @return */ String uploadByStream(String bulkName, String keyPath, String fileName, String appCode, byte[] fileContent, - Integer channelType, Integer fileUploadType); + Integer channelType, Integer fileUploadType, String filePath); /** * 下载文件 diff --git a/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/request/ServerFileUploadDto.java b/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/request/ServerFileUploadDto.java index 6822722..ec4d441 100644 --- a/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/request/ServerFileUploadDto.java +++ b/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/request/ServerFileUploadDto.java @@ -20,6 +20,7 @@ public class ServerFileUploadDto { private String bizScene; private String fileName; private byte[] fileContent; + private String filePath; @Override public String toString() { diff --git a/oss-manager/src/main/java/cn/axzo/oss/manager/impl/FileManagerImpl.java b/oss-manager/src/main/java/cn/axzo/oss/manager/impl/FileManagerImpl.java index 7c1af7f..c0a6005 100644 --- a/oss-manager/src/main/java/cn/axzo/oss/manager/impl/FileManagerImpl.java +++ b/oss-manager/src/main/java/cn/axzo/oss/manager/impl/FileManagerImpl.java @@ -53,7 +53,7 @@ public class FileManagerImpl implements FileManager { * @param keyPath key的前置路径 */ public String uploadByStream(String bulkName, String keyPath, String fileName, String appCode, byte[] fileContent, - Integer channelType, Integer fileUploadType) { + Integer channelType, Integer fileUploadType, String filePath) { InputStream inputStream = new ByteArrayInputStream(fileContent); @@ -71,7 +71,7 @@ public class FileManagerImpl implements FileManager { 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); + return huaWeiCloudService.checkPointUploadFile(bulkName, fileName, appCode, inputStream, filePath); } else { return huaWeiCloudService.multipartUpload(bulkName, fileName, appCode, inputStream); } diff --git a/oss-service-api/src/main/java/cn/axzo/oss/service/api/FileService.java b/oss-service-api/src/main/java/cn/axzo/oss/service/api/FileService.java index 8e2d08d..52e364e 100644 --- a/oss-service-api/src/main/java/cn/axzo/oss/service/api/FileService.java +++ b/oss-service-api/src/main/java/cn/axzo/oss/service/api/FileService.java @@ -3,6 +3,7 @@ package cn.axzo.oss.service.api; import cn.axzo.framework.auth.domain.ContextInfo; import cn.axzo.oss.manager.api.dto.request.*; import cn.axzo.oss.manager.api.dto.response.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.InputStream; @@ -48,4 +49,6 @@ public interface FileService { ServerFileUploadResponse uploadObs(ServerFileUploadDto dto, ContextInfo.LiteSaasContext liteSaasContext, Integer fileUploadType); + + String getFilePath(MultipartFile file); } diff --git a/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java b/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java index c633b16..7b8d3c4 100644 --- a/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java +++ b/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java @@ -29,8 +29,12 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; +import java.io.FileOutputStream; +import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; @@ -580,7 +584,7 @@ public class FileServiceImpl implements FileService { String tgtFileKey = Utility.generateFileKey(fileUploadConfig.getDirectory(), uuid, fileConform); // 上传文件 String fileUrl = fileManager.uploadByStream(fileUploadConfig.getBucketName(), tgtFileKey, dto.getFileName(), - dto.getAppCode(), dto.getFileContent(), channelType, fileUploadType); + dto.getAppCode(), dto.getFileContent(), channelType, fileUploadType, dto.getFilePath()); // 保存失败 if (Utility.isBlank(fileUrl)) { @@ -628,4 +632,32 @@ public class FileServiceImpl implements FileService { return setResponse(ossFile); } + @Override + public String getFilePath(MultipartFile file) { + // 创建输入流 + InputStream input = null; + try { + input = file.getInputStream(); + // 指定目标文件路径及文件名 + String targetDir = "target/"; + String fileName = file.getOriginalFilename(); + String filePath = targetDir + fileName; + + // 创建输出流并写入数据 + OutputStream output = new FileOutputStream(filePath); + byte[] buffer = new byte[1024]; + int length; + while ((length = input.read(buffer)) > 0) { + output.write(buffer, 0, length); + } + + // 关闭流 + input.close(); + output.close(); + + return filePath; + } catch (IOException e) { + throw new RuntimeException(e); + } + } }