Minio上传文件时最大2G解决
·
项目场景:
在一个上传大文件到Minio的场景中,上传大于2G的文件,在Minio中只显示2G
问题描述
从本地的FileInputStream中读取文件,然后上传到Minio
Minio上传文件代码如下
public void putObject(String objectName, InputStream stream, String contentType) {
try {
PutObjectArgs args = PutObjectArgs.builder()
.bucket(minioProperties.getBucket())
.object(objectName)
.contentType(contentType)
.stream(stream, stream.available(), -1)
.build();
minioClient.putObject(args);
} catch (Exception e) {
log.error(e.getMessage());
throw new ServerException(CODE_411);
}
}
原因分析:
问题出现在
stream.available()这个地方,available()返回 int 类型,其最大值为 Integer.MAX_VALUE。当文件大小超过 2GB 时,返回值会被强制截断为该值,无法反映实际文件大小
public int available() throws IOException {
return 0;
}
解决方案:
用
long objectSize = ((FileInputStream) stream).getChannel().size();表示文件大小
修改后的代码
public void putObject(String objectName, InputStream stream, String contentType) {
try {
long objectSize = ((FileInputStream) stream).getChannel().size();
PutObjectArgs args = PutObjectArgs.builder()
.bucket(minioProperties.getBucket())
.object(objectName)
.contentType(contentType)
.stream(stream, objectSize, -1)
.build();
minioClient.putObject(args);
} catch (Exception e) {
log.error(e.getMessage());
throw new ServerException(CODE_411);
}
}
更多推荐


所有评论(0)