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 5235b96..f6d3e1d 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 @@ -140,6 +140,7 @@ public class WebFileController { .fileName(fileName) .tgtFileKey(tgtFileKey) .fileContent(file.getInputStream()) + .file(file) .uploadId(uploadId) .build(); MultipartUploadFileResponse response = fileService.multipartUploadFile(dto); diff --git a/oss-integration/src/main/java/cn/axzo/oss/integration/s3/base/BaseS3Service.java b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/base/BaseS3Service.java index e5c5080..d50f17e 100644 --- a/oss-integration/src/main/java/cn/axzo/oss/integration/s3/base/BaseS3Service.java +++ b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/base/BaseS3Service.java @@ -63,5 +63,5 @@ public interface BaseS3Service { String multipartUploadComplete(String bucketName, String tgtFileKey, String uploadId, List partETags); - List multipartUploadFile(String bucketName, String tgtFileKey, String uploadId, InputStream inputStream); + List multipartUploadFile(String bucketName, String tgtFileKey, String uploadId, MultipartFile file); } diff --git a/oss-integration/src/main/java/cn/axzo/oss/integration/s3/impl/AliOssServiceImpl.java b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/impl/AliOssServiceImpl.java index bcaef8e..84385ed 100644 --- a/oss-integration/src/main/java/cn/axzo/oss/integration/s3/impl/AliOssServiceImpl.java +++ b/oss-integration/src/main/java/cn/axzo/oss/integration/s3/impl/AliOssServiceImpl.java @@ -196,7 +196,7 @@ public class AliOssServiceImpl implements AliOssService { } @Override - public List multipartUploadFile(String bucketName, String tgtFileKey, String uploadId, InputStream inputStream) { + public List multipartUploadFile(String bucketName, String tgtFileKey, String uploadId, MultipartFile file) { OSS client = aliOssClient.getClient(); try { List partETags = new ArrayList(); @@ -204,7 +204,7 @@ public class AliOssServiceImpl implements AliOssService { final long partSize = 10 * 1024 * 1024L; //1 MB。 // 根据上传的数据大小计算分片数。以本地文件为例,说明如何通过File.length()获取上传数据的大小。 - long fileLength = inputStream.available(); + long fileLength = file.getSize(); int partCount = (int) (fileLength / partSize); if (fileLength % partSize != 0) { partCount++; @@ -223,6 +223,9 @@ public class AliOssServiceImpl implements AliOssService { // 分片文件 //InputStream inputStream = new ByteArrayInputStream(fileContent); //inputStream.skip(startPos); + // 跳过已经上传的分片。 + InputStream inputStream = file.getInputStream(); + inputStream.skip(startPos); partRequest.setInputStream(inputStream); // 分片大小。除了最后一个分片没有大小限制,其他的分片最小为100 KB。 partRequest.setPartSize(curPartSize); diff --git a/oss-manager-api/pom.xml b/oss-manager-api/pom.xml index c76ed1c..8b81202 100644 --- a/oss-manager-api/pom.xml +++ b/oss-manager-api/pom.xml @@ -22,6 +22,10 @@ cn.axzo.oss oss-dal - + + org.springframework + spring-web + + 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 e6d7c57..81220fb 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 @@ -3,6 +3,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 org.springframework.web.multipart.MultipartFile; import java.io.InputStream; import java.util.List; @@ -48,5 +49,5 @@ public interface FileManager { String multipartUploadComplete(String bucketName, String tgtFileKey, String uploadId, List partETags); - List multipartUploadFile(String bucketName, String tgtFileKey, InputStream inputStream, MultipartUploadFileDto dto); + List multipartUploadFile(String bucketName, String tgtFileKey, MultipartFile file, MultipartUploadFileDto dto); } diff --git a/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/request/MultipartUploadFileDto.java b/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/request/MultipartUploadFileDto.java index dcd17da..8e332ad 100644 --- a/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/request/MultipartUploadFileDto.java +++ b/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/request/MultipartUploadFileDto.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.springframework.web.multipart.MultipartFile; import javax.validation.constraints.NotBlank; import java.io.File; @@ -34,6 +35,8 @@ public class MultipartUploadFileDto { private InputStream fileContent; + private MultipartFile file; + /** * oss上传时的上传id */ 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 5734f51..7aec062 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 @@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; import java.io.ByteArrayInputStream; import java.io.InputStream; @@ -72,8 +73,8 @@ public class FileManagerImpl implements FileManager { } @Override - public List multipartUploadFile(String bucketName, String tgtFileKey, InputStream inputStream, MultipartUploadFileDto dto) { - List partETags = aliOssService.multipartUploadFile(bucketName, tgtFileKey, dto.getUploadId(), dto.getFileContent()); + public List multipartUploadFile(String bucketName, String tgtFileKey, MultipartFile file, MultipartUploadFileDto dto) { + List partETags = aliOssService.multipartUploadFile(bucketName, tgtFileKey, dto.getUploadId(), file); return BeanConvertUtil.copyList(partETags, PartETag.class); } 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 2a11d63..5be20cf 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 @@ -182,13 +182,13 @@ public class FileServiceImpl implements FileService { } @Override - public MultipartUploadFileResponse multipartUploadFile(MultipartUploadFileDto dto) throws IOException { + public MultipartUploadFileResponse multipartUploadFile(MultipartUploadFileDto dto) { FileUploadConfig fileUploadConfig = getFileUploadConfig(dto.getAppCode(), dto.getBizScene()); // 判断容量 - isFileConform(fileUploadConfig, dto.getFileContent().available(), dto.getFileName()); + isFileConform(fileUploadConfig, (int)dto.getFile().getSize(), dto.getFileName()); List partETags = fileManager.multipartUploadFile(fileUploadConfig.getBucketName(), - dto.getTgtFileKey(), dto.getFileContent(), dto); + dto.getTgtFileKey(), dto.getFile(), dto); MultipartUploadFileResponse response = MultipartUploadFileResponse.builder() .uploadId(dto.getUploadId()) .partETags(partETags)