文件分片上传优化调整
This commit is contained in:
parent
83900d8835
commit
435b87a54b
@ -140,6 +140,7 @@ public class WebFileController {
|
|||||||
.fileName(fileName)
|
.fileName(fileName)
|
||||||
.tgtFileKey(tgtFileKey)
|
.tgtFileKey(tgtFileKey)
|
||||||
.fileContent(file.getInputStream())
|
.fileContent(file.getInputStream())
|
||||||
|
.file(file)
|
||||||
.uploadId(uploadId)
|
.uploadId(uploadId)
|
||||||
.build();
|
.build();
|
||||||
MultipartUploadFileResponse response = fileService.multipartUploadFile(dto);
|
MultipartUploadFileResponse response = fileService.multipartUploadFile(dto);
|
||||||
|
|||||||
@ -63,5 +63,5 @@ public interface BaseS3Service {
|
|||||||
|
|
||||||
String multipartUploadComplete(String bucketName, String tgtFileKey, String uploadId, List<PartETag> partETags);
|
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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -196,7 +196,7 @@ public class AliOssServiceImpl implements AliOssService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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();
|
OSS client = aliOssClient.getClient();
|
||||||
try {
|
try {
|
||||||
List<PartETag> partETags = new ArrayList<PartETag>();
|
List<PartETag> partETags = new ArrayList<PartETag>();
|
||||||
@ -204,7 +204,7 @@ public class AliOssServiceImpl implements AliOssService {
|
|||||||
final long partSize = 10 * 1024 * 1024L; //1 MB。
|
final long partSize = 10 * 1024 * 1024L; //1 MB。
|
||||||
|
|
||||||
// 根据上传的数据大小计算分片数。以本地文件为例,说明如何通过File.length()获取上传数据的大小。
|
// 根据上传的数据大小计算分片数。以本地文件为例,说明如何通过File.length()获取上传数据的大小。
|
||||||
long fileLength = inputStream.available();
|
long fileLength = file.getSize();
|
||||||
int partCount = (int) (fileLength / partSize);
|
int partCount = (int) (fileLength / partSize);
|
||||||
if (fileLength % partSize != 0) {
|
if (fileLength % partSize != 0) {
|
||||||
partCount++;
|
partCount++;
|
||||||
@ -223,6 +223,9 @@ public class AliOssServiceImpl implements AliOssService {
|
|||||||
// 分片文件
|
// 分片文件
|
||||||
//InputStream inputStream = new ByteArrayInputStream(fileContent);
|
//InputStream inputStream = new ByteArrayInputStream(fileContent);
|
||||||
//inputStream.skip(startPos);
|
//inputStream.skip(startPos);
|
||||||
|
// 跳过已经上传的分片。
|
||||||
|
InputStream inputStream = file.getInputStream();
|
||||||
|
inputStream.skip(startPos);
|
||||||
partRequest.setInputStream(inputStream);
|
partRequest.setInputStream(inputStream);
|
||||||
// 分片大小。除了最后一个分片没有大小限制,其他的分片最小为100 KB。
|
// 分片大小。除了最后一个分片没有大小限制,其他的分片最小为100 KB。
|
||||||
partRequest.setPartSize(curPartSize);
|
partRequest.setPartSize(curPartSize);
|
||||||
|
|||||||
@ -22,6 +22,10 @@
|
|||||||
<groupId>cn.axzo.oss</groupId>
|
<groupId>cn.axzo.oss</groupId>
|
||||||
<artifactId>oss-dal</artifactId>
|
<artifactId>oss-dal</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
<dependency>
|
||||||
|
<groupId>org.springframework</groupId>
|
||||||
|
<artifactId>spring-web</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@ -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.PartETag;
|
||||||
import cn.axzo.oss.manager.api.dto.request.MultipartUploadDto;
|
import cn.axzo.oss.manager.api.dto.request.MultipartUploadDto;
|
||||||
import cn.axzo.oss.manager.api.dto.request.MultipartUploadFileDto;
|
import cn.axzo.oss.manager.api.dto.request.MultipartUploadFileDto;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -48,5 +49,5 @@ public interface FileManager {
|
|||||||
|
|
||||||
String multipartUploadComplete(String bucketName, String tgtFileKey, String uploadId, List<PartETag> partETags);
|
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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import lombok.AllArgsConstructor;
|
|||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@ -34,6 +35,8 @@ public class MultipartUploadFileDto {
|
|||||||
|
|
||||||
private InputStream fileContent;
|
private InputStream fileContent;
|
||||||
|
|
||||||
|
private MultipartFile file;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* oss上传时的上传id
|
* oss上传时的上传id
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@ -72,8 +73,8 @@ public class FileManagerImpl implements FileManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<PartETag> multipartUploadFile(String bucketName, String tgtFileKey, InputStream inputStream, MultipartUploadFileDto dto) {
|
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(), dto.getFileContent());
|
List<com.aliyun.oss.model.PartETag> partETags = aliOssService.multipartUploadFile(bucketName, tgtFileKey, dto.getUploadId(), file);
|
||||||
return BeanConvertUtil.copyList(partETags, PartETag.class);
|
return BeanConvertUtil.copyList(partETags, PartETag.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -182,13 +182,13 @@ public class FileServiceImpl implements FileService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MultipartUploadFileResponse multipartUploadFile(MultipartUploadFileDto dto) throws IOException {
|
public MultipartUploadFileResponse multipartUploadFile(MultipartUploadFileDto dto) {
|
||||||
FileUploadConfig fileUploadConfig = getFileUploadConfig(dto.getAppCode(), dto.getBizScene());
|
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(),
|
List<PartETag> partETags = fileManager.multipartUploadFile(fileUploadConfig.getBucketName(),
|
||||||
dto.getTgtFileKey(), dto.getFileContent(), dto);
|
dto.getTgtFileKey(), dto.getFile(), dto);
|
||||||
MultipartUploadFileResponse response = MultipartUploadFileResponse.builder()
|
MultipartUploadFileResponse response = MultipartUploadFileResponse.builder()
|
||||||
.uploadId(dto.getUploadId())
|
.uploadId(dto.getUploadId())
|
||||||
.partETags(partETags)
|
.partETags(partETags)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user