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

Go应用可上传删除Minio对象,但Stat/GetObject返回空信息

问题分析与解决

核心问题

你的downloadFromMinio函数存在逻辑错误:从未将GetObject获取到的文件对象赋值给返回变量,始终返回初始化时的nil值,这就是后续判断file == nil为true、出现切片越界的根本原因。

从控制台输出可以看到,StatObject其实已经成功获取到了对象元数据(比如文件大小497741、Content-Type等),GetObject也成功拿到了下载对象,只是你没有把这个对象返回给调用方。

修改后的代码

func downloadFromMinio(rs *appResource, name string, userId float64) (multipart.File, error) {
    user, err := getUser(rs, int64(userId))
    if err != nil {
        log.Println(err)
        return nil, err
    }

    clientIdString := strconv.FormatInt(*user.CompanyId, 10)
    bucketName := "company-" + clientIdString

    log.Println(bucketName)
    log.Println(name)

    found, err := rs.mc.BucketExists(context.Background(), bucketName)
    if err != nil {
        log.Println("Error checking if minio bucket exists")
        log.Println(err)
        return nil, err
    }
    if found {
        log.Println("Bucket found")
    }

    objInfo, err := rs.mc.StatObject(context.Background(), bucketName, name, minio.StatObjectOptions{})
    if err != nil {
        log.Println("Error checking minio object metadata")
        log.Println(err)
        return nil, err
    } else {
        log.Println(objInfo)
    }

    downloadInfo, err := rs.mc.GetObject(context.Background(), bucketName, name, minio.GetObjectOptions{})
    if err != nil {
        log.Println("Error downloading minio object")
        log.Println(err)
        return nil, err
    }

    log.Println("Successfully downloaded minio bytes: ", downloadInfo)
    // minio.Object实现了multipart.File接口,直接返回即可
    return downloadInfo, nil
}

关键修改点

  1. 移除冗余的var file multipart.File初始化,错误场景直接返回nil
  2. 函数末尾返回downloadInfo——minio.Object类型完全兼容multipart.File接口(两者均为io.ReadCloser的别名)
  3. 修正错误返回值,确保无异常时返回nil

额外注意事项

调用该函数的代码需要负责关闭返回的文件对象,避免资源泄漏:

file, err := downloadFromMinio(rs, fileName, userId)
if err != nil {
    // 错误处理逻辑
}
defer file.Close()
// 后续读取文件内容的逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:00:54