You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Minio S3创建Bucket并上传JPG文件后无法打开文件

问题原因分析
  • 代码中两次调用putObject上传同一个Resume.jpg对象,第二次上传会直接覆盖第一次的内容。
  • 第二次上传时,stream()方法的第二个参数错误设置为1L——这个参数代表文件的实际字节大小,硬写1L会导致Minio仅读取1字节的文件内容,上传后的文件不完整,因此无法正常打开。
  • 另外,stream.available()不能保证获取到文件的完整长度,对于大文件可能出现长度计算错误的情况。
修正后的代码
public void saveTest() {
    try {
        MinioClient minioClient = MinioClient.builder()
                .endpoint("http://localhost:9099")
                .credentials("minioadmin", "minioadmin")
                .build();

        boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket("test").build());
        if (!found) {
            minioClient.makeBucket(MakeBucketArgs.builder().bucket("test").build());
        } else {
            System.out.println("Bucket 'test' already exists.");
        }

        File imageFile = new File("C:\\path\\picture.jpg");
        // 使用正确的文件大小和类型上传
        minioClient.putObject(PutObjectArgs.builder()
                .bucket("test")
                .object("Resume.jpg")
                .stream(new FileInputStream(imageFile), imageFile.length(), 5L * 1024 * 1024)
                .contentType("image/jpeg") // 明确指定图片类型,提升兼容性
                .build());

        System.out.println("文件上传完成");
    } catch (MinioException | IOException | NoSuchAlgorithmException | InvalidKeyException e) {
        System.out.println("Error occurred: " + e.getMessage());
        e.printStackTrace();
    }
}
关键修复说明
  • 删除重复的putObject调用,避免文件被错误覆盖。
  • 用imageFile.length()获取文件真实字节数,替代硬编码的1L,确保上传完整的文件内容。
  • 添加contentType("image/jpeg")指定文件MIME类型,帮助Minio和后续访问的客户端正确识别文件格式。
  • 使用File对象管理目标文件,更可靠地获取文件信息。

内容的提问来源于stack exchange,提问作者Maleficent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:16:17