文件分片上传接口调整

This commit is contained in:
tianliyong 2023-08-23 20:47:24 +08:00
parent 71473b3caa
commit 18d90d0081
8 changed files with 15 additions and 11 deletions

View File

@ -139,7 +139,7 @@ public class WebFileController {
.bizScene(bizScene)
.fileName(fileName)
.tgtFileKey(tgtFileKey)
.fileContent(file.getBytes())
.fileContent(file.getInputStream())
.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, byte[] fileContent);
List<PartETag> multipartUploadFile(String bucketName, String tgtFileKey, String uploadId, InputStream inputStream);
}

View File

@ -196,7 +196,7 @@ public class AliOssServiceImpl implements AliOssService {
}
@Override
public List<PartETag> multipartUploadFile(String bucketName, String tgtFileKey, String uploadId, byte[] fileContent) {
public List<PartETag> multipartUploadFile(String bucketName, String tgtFileKey, String uploadId, InputStream inputStream) {
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 = fileContent.length;
long fileLength = inputStream.available();
int partCount = (int) (fileLength / partSize);
if (fileLength % partSize != 0) {
partCount++;
@ -221,7 +221,7 @@ public class AliOssServiceImpl implements AliOssService {
// 分片上传uploadId
partRequest.setUploadId(uploadId);
// 分片文件
InputStream inputStream = new ByteArrayInputStream(fileContent);
//InputStream inputStream = new ByteArrayInputStream(fileContent);
inputStream.skip(startPos);
partRequest.setInputStream(inputStream);
// 分片大小除了最后一个分片没有大小限制其他的分片最小为100 KB

View File

@ -48,5 +48,5 @@ public interface FileManager {
String multipartUploadComplete(String bucketName, String tgtFileKey, String uploadId, List<PartETag> partETags);
List<PartETag> multipartUploadFile(String bucketName, String tgtFileKey, byte[] fileContent, MultipartUploadFileDto dto);
List<PartETag> multipartUploadFile(String bucketName, String tgtFileKey, InputStream inputStream, MultipartUploadFileDto dto);
}

View File

@ -6,6 +6,8 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import java.io.File;
import java.io.InputStream;
/**
* @Author: liyong.tian
@ -30,7 +32,7 @@ public class MultipartUploadFileDto {
@NotBlank
private String tgtFileKey;
private byte[] fileContent;
private InputStream fileContent;
/**
* oss上传时的上传id

View File

@ -72,7 +72,7 @@ public class FileManagerImpl implements FileManager {
}
@Override
public List<PartETag> multipartUploadFile(String bucketName, String tgtFileKey, byte[] fileContent, MultipartUploadFileDto dto) {
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());
return BeanConvertUtil.copyList(partETags, PartETag.class);
}

View File

@ -4,6 +4,7 @@ import cn.axzo.framework.auth.domain.ContextInfo;
import cn.axzo.oss.manager.api.dto.request.*;
import cn.axzo.oss.manager.api.dto.response.*;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
@ -43,5 +44,5 @@ public interface FileService {
FileInformationResponse multipartUploadComplete(MultipartUploadCompleteDto dto);
MultipartUploadFileResponse multipartUploadFile(MultipartUploadFileDto dto);
MultipartUploadFileResponse multipartUploadFile(MultipartUploadFileDto dto) throws IOException;
}

View File

@ -31,6 +31,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import java.util.concurrent.CompletableFuture;
@ -181,10 +182,10 @@ public class FileServiceImpl implements FileService {
}
@Override
public MultipartUploadFileResponse multipartUploadFile(MultipartUploadFileDto dto) {
public MultipartUploadFileResponse multipartUploadFile(MultipartUploadFileDto dto) throws IOException {
FileUploadConfig fileUploadConfig = getFileUploadConfig(dto.getAppCode(), dto.getBizScene());
// 判断容量
isFileConform(fileUploadConfig, dto.getFileContent().length, dto.getFileName());
isFileConform(fileUploadConfig, dto.getFileContent().available(), dto.getFileName());
List<PartETag> partETags = fileManager.multipartUploadFile(fileUploadConfig.getBucketName(),
dto.getTgtFileKey(), dto.getFileContent(), dto);