如何获取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复制到HTML的// 在上传成功后添加以下代码生成预签名URL presignedURL, err := minioClient.PresignedGetObject(ctx, bucketName, objectName, 60*60*24*7, nil) if err != nil { log.Fatalln(err) } log.Println("预签名URL:", presignedURL.String())src属性中即可。
内容的提问来源于stack exchange,提问作者Hojamuhammet
相关产品推荐
相关产品推荐

