文件分片上传优化调整

This commit is contained in:
tianliyong 2023-08-24 09:56:48 +08:00
parent 83900d8835
commit 435b87a54b
8 changed files with 23 additions and 10 deletions

View File

@ -140,6 +140,7 @@ public class WebFileController {
.fileName(fileName)
.tgtFileKey(tgtFileKey)
.fileContent(file.getInputStream())
.file(file)
.uploadId(uploadId)
.build();
MultipartUploadFileResponse response = fileService.multipartUploadFile(dto);

View File

@ -63,5 +63,5 @@ public interface BaseS3Service {
String multipartUploadComplete(String bucketName, String tgtFileKey, String uploadId, List<PartETag> partETags);
List<PartETag> multipartUploadFile(String bucketName, String tgtFileKey, String uploadId, InputStream inputStream);
List<PartETag> multipartUploadFile(String bucketName, String tgtFileKey, String uploadId, MultipartFile file);
}

View File

@ -196,7 +196,7 @@ public class AliOssServiceImpl implements AliOssService {
}
@Override
public List<PartETag> multipartUploadFile(String bucketName, String tgtFileKey, String uploadId, InputStream inputStream) {
public List<PartETag> multipartUploadFile(String bucketName, String tgtFileKey, String uploadId, MultipartFile file) {
OSS client = aliOssClient.getClient();
try {
List<PartETag> partETags = new ArrayList<PartETag>();
@ -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);

View File

@ -22,6 +22,10 @@
<groupId>cn.axzo.oss</groupId>
<artifactId>oss-dal</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -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<PartETag> partETags);
List<PartETag> multipartUploadFile(String bucketName, String tgtFileKey, InputStream inputStream, MultipartUploadFileDto dto);
List<PartETag> multipartUploadFile(String bucketName, String tgtFileKey, MultipartFile file, MultipartUploadFileDto dto);
}

View File

@ -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
*/

View File

@ -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<PartETag> multipartUploadFile(String bucketName, String tgtFileKey, InputStream inputStream, MultipartUploadFileDto dto) {
List<com.aliyun.oss.model.PartETag> partETags = aliOssService.multipartUploadFile(bucketName, tgtFileKey, dto.getUploadId(), dto.getFileContent());
public List<PartETag> multipartUploadFile(String bucketName, String tgtFileKey, MultipartFile file, MultipartUploadFileDto dto) {
List<com.aliyun.oss.model.PartETag> partETags = aliOssService.multipartUploadFile(bucketName, tgtFileKey, dto.getUploadId(), file);
return BeanConvertUtil.copyList(partETags, PartETag.class);
}

View File

@ -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<PartETag> partETags = fileManager.multipartUploadFile(fileUploadConfig.getBucketName(),
dto.getTgtFileKey(), dto.getFileContent(), dto);
dto.getTgtFileKey(), dto.getFile(), dto);
MultipartUploadFileResponse response = MultipartUploadFileResponse.builder()
.uploadId(dto.getUploadId())
.partETags(partETags)