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

如何获取Minio存储桶图片的有效链接以在HTML中展示

问题:Minio存储桶图片无法在HTML中显示

浏览器访问图片链接时返回错误:

GET https://127.0.0.1:9000/myphotos/Jungles.jpeg?[签名参数省略]
net::ERR_CONNECTION_REFUSED

上传文件的Go代码

package main

import (
    "context"
    "log"

    "github.com/minio/minio-go/v7"
    "github.com/minio/minio-go/v7/pkg/credentials"
)

func main() {
    ctx := context.Background()
    endpoint := "play.minio.io"
    accessKeyId := "************"
    secretAccessKey := "***********"
    useSSL := true

    // init minio client object
    minioClient, err := minio.New(endpoint, &minio.Options{
        Creds:  credentials.NewStaticV4(accessKeyId, secretAccessKey, ""),
        Secure: useSSL,
    })
    if err != nil {
        log.Fatalln(err)
    }

    // make a new bucket called myphoto
    bucketName := "photobucket"
    location := "us-east-1"

    err = minioClient.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{Region: location})
    if err != nil {
        // check to see if we already own this bucket
        exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
        if errBucketExists == nil && exists {
            log.Printf("We already own %s\n", bucketName)
        } else {
            log.Fatalln(err)
        }
    } else {
        log.Printf("Successfully created %s\n", bucketName)
    }

    // upload you photos
    objectName := "Jungles.jpeg"
    filePath := "/minio-1/Jungles.jpeg"
    contentType := "image/jpeg"

    // upload the zip file FPutObject
    info, err := minioClient.FPutObject(ctx, bucketName, objectName, filePath, minio.PutObjectOptions{ContentType: contentType})
    if err != nil {
        log.Fatalln(err)
    }

    log.Printf("Successfully uploaded %s of size %d\n", objectName, info.Size)
}

展示图片的HTML代码

<!DOCTYPE html>
<html>
    <head>
        <title> Minio </title>
        <meta charset="utf-8">
    </head>
    <body>
        <div>
            <img src="https://127.0.0.1:9000/myphotos/Jungles.jpeg?[签名参数省略]" alt="Photo from Minio">
        </div>
    </body>
</html>

已尝试的方法

  • 调整HTML代码,确认问题不在HTML层面
  • 尝试除「存储桶→点击图片→点击分享」之外的所有分享方式
  • 未找到获取存储桶中图片有效链接的正确方法

解决方案

1. 修正服务端点不一致问题

上传代码连接的是公共Minio服务 play.minio.io,但HTML里用的是本地地址 127.0.0.1:9000,两者完全不匹配。如果使用公共play服务,图片链接的端点应该是 https://play.minio.io;如果用本地Minio服务,需要修改上传代码里的endpoint为127.0.0.1:9000,并确保本地服务正常运行。

2. 修正存储桶名称不一致

上传代码中创建并使用的存储桶是 photobucket,但HTML里写的是 myphotos,这会导致找不到对应资源。把HTML里的桶名改成photobucket。

3. 正确获取图片链接的方式

  • 公开权限场景:如果已设置桶和对象为公开访问,直接使用不带签名参数的链接即可:
    https://play.minio.io/photobucket/Jungles.jpeg
    
  • 私有权限场景:如果资源是私有的,需要通过SDK生成有效的预签名URL,示例代码如下:
    // 在上传成功后添加以下代码生成预签名URL
    presignedURL, err := minioClient.PresignedGetObject(ctx, bucketName, objectName, 60*60*24*7, nil)
    if err != nil {
        log.Fatalln(err)
    }
    log.Println("预签名URL:", presignedURL.String())
    
    将生成的URL复制到HTML的src属性中即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:51:14