代码拉取完成,页面将自动刷新
X File Storage 版本号:2.2.1
SpringBoot 版本号:2.7
JVM 版本号:openJDK8
其它依赖的名称及版本号:aliyun-sdk-oss 3.17.4
配置文件没问题
@Test
@DisplayName("分片上传")
@Disabled
@SneakyThrows
public void testMultipartUpload1() {
File file = new File("D:\\test.mp4");//文件大概6M
// File file = new File("D:\\VMware-images\\CentOS-7-x86_64-Minimal-2009.iso");;//900M+
FileInfo fileInfo = fileStorageService.initiateMultipartUpload().setPlatform("aliyun").setPath("default/").setSaveFilename(file.getName()).init();
try (
InputStream in = new FileInputStream(file);
) {
byte[] bs = new byte[5 * 1024 * 1024];//每一片5MB
int len = 0;
int partNumber = 0;
try {
while ((len = in.read(bs)) > 0) {
partNumber++;
ByteArrayInputStream bin = new ByteArrayInputStream(bs, 0, len);
fileStorageService.uploadPart(fileInfo, partNumber, bin).upload();
out("上传分片成功:" + partNumber + " len:" + len);
}
out("分片上传成功:" + fileStorageService.completeMultipartUpload(fileInfo).complete().getUrl());
} catch (Exception e) {
out("分片上传失败", e);
fileStorageService.abortMultipartUpload(fileInfo).abort();
}
}
}
上传成功
手动文件分片上传-列举已上传的分片失败!
说明:我同时配置了local-plus,minio,aliyun-oss,使用前两个都正常完成
将上传代码中的partNumber从2开始,然后在调试模式下手工修改pre.partNumberMarker的值为1,上传成功
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
正常情况下 partNumber 需要从1开始递增就可以了,你可以试一下手动获取分片列表看看结果是怎样的
这里的问题不是从1开始的问题,而是调用aliyun-sdk-oss中获取分片列表的方法的时候,传参partNumberMarker为0会报错的问题,返回所有的分片信息partNumberMarker这个参数不要传就可以了,org.dromara.x.file.storage.core.platform.AliyunOssFileStorage
第252行原有代码
request.setPartNumberMarker(pre.getPartNumberMarker());
改为
if(pre.getPartNumberMarker()>0){
request.setPartNumberMarker(pre.getPartNumberMarker());
}
给一个aliyun-oss手工分片上传bug的修复方案
@Component
@Slf4j
@RequiredArgsConstructor
public class FixFileStorageAspect implements FileStorageAspect {
@Override
public FilePartInfoList listParts(ListPartsAspectChain chain, ListPartsPretreatment pre, FileStorage fileStorage) {
if(fileStorage instanceof AliyunOssFileStorage) {
pre.setPartNumberMarker(null);
}
return chain.next(pre,fileStorage);
}
}
我刚才就遇到这个问题
登录 后才可以发表评论