MinioGolangSDK使用学习3

该博客介绍了如何使用Minio的Golang SDK生成预签名URL,以便第三方可以安全地下载或上传文件。通过PresignedGetObject、PresignedPutObject和PresignedPostPolicy方法,可以创建GET、PUT请求的URL,并设置过期时间和特定的上传策略。这些预签名URL提供了对S3存储桶中文件的临时访问权限,而无需暴露AWS凭证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用预签名URL生成让第三方操作文件

主要的API有三个

  • PresignedGetObject(bucketName, objectName string, expiry time.Duration, reqParams url.Values) (*url.URL, error)
  • PresignedPutObject(bucketName, objectName string, expiry time.Duration) (*url.URL, error)
  • PresignedPostPolicy(PostPolicy) (*url.URL, map[string]string, error)

PresignedGetObject(bucketName, objectName string, expiry time.Duration, reqParams url.Values) (*url.URL, error)

生成预签名URL用于GET请求下载文件
第一个参数是桶名,第二个参数是对象名,第三个参数是生存时间,第四个参数是额外响应头。
返回URL和error

	reqParams := make(url.Values)
	reqParams.Set("response-content-disposition", "attachment; filename=\"[雲呑めお] おかえり [中国翻訳] [DL版].zip\"")

	// Generates a presigned url which expires in a day.
	presignedURL, err := minioClient.PresignedGetObject(bucketName, "[雲呑めお] おかえり [中国翻訳] [DL版].zip", time.Second*24*60*60, reqParams)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("Successfully generated presigned URL", presignedURL)
	

输出结果

Successfully generated presigned URL http://127.0.0.1:9000/mymusic/%5B%E9%9B%B2%E5%91%91%E3%82%81%E3%81%8A%5D%20%E3%81%8A%E3%81%8B%E3%81%88%E3%82%8A%20%5B%E4%B8%AD%E5%9B%BD%E7%BF%BB%E8%A8%B3%5D%20%5BDL%E7%89%88%5D.zip?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioroot%2F20210902%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210902T032534Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3D%22%5B%E9%9B%B2%E5%91%91%E3%82%81%E3%81%8A%5D%20%E3%81%8A%E3%81%8B%E3%81%88%E3%82%8A%20%5B%E4%B8%AD%E5%9B%BD%E7%BF%BB%E8%A8%B3%5D%20%5BDL%E7%89%88%5D.zip%22&X-Amz-Signature=e2b439a875911030023c655f2026c6d54530f84f3c6d55addd60e79ecc1d404d

PresignedPutObject(bucketName, objectName string, expiry time.Duration) (*url.URL, error)

生成预签名URL用于PUT请求上传文件
第一个参数是桶名,第二个参数是对象名,第三个参数是生存时间。
返回URL和error

	expiry := time.Second * 24 * 60 * 60 // 1 day.
	presignedURL, err := minioClient.PresignedPutObject(bucketName, "abcdde", expiry)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("Successfully generated presigned URL", presignedURL)

输出结果

Successfully generated presigned URL http://127.0.0.1:9000/mymusic/abcde?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioroot%2F20210902%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210902T032921Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=40b24d2ec1a5b737584568565256cb6c110264c1b8fff475fae68ff8d0b6c0c5

PresignedPostPolicy(PostPolicy) (*url.URL, map[string]string, error)

生成具有特定规则的用于POST请求上传文件的URL
参数 PostPolicy结构体
需设置对象名,桶名,生存时间,用户元数据
可设置文件类型

返回url、formdata和error,
将formdata中的数据添加到post请求的formdata里即可

	policy := minio.NewPostPolicy()

	// Apply upload policy restrictions:
	policy.SetBucket(bucketName)
	policy.SetKey("myobject11")
	policy.SetExpires(time.Now().UTC().AddDate(0, 0, 10)) // expires in 10 days

	// // Only allow 'png' images.
	// policy.SetContentType("image/png")

	// Only allow content size in range 1KB to 1MB.
	policy.SetContentLengthRange(1024, 1024*1024*1024)

	// // Add a user metadata using the key "custom" and value "user"
	policy.SetUserMetadata("yiwuuyi", "yiwuuyi123456")

	// Get the POST form key/value object:
	url, formData, err := minioClient.PresignedPostPolicy(policy)
	if err != nil {
		fmt.Println(err)
		return
	}

	// POST your content from the command line using `curl`
	fmt.Printf("curl ")
	for k, v := range formData {
		fmt.Println(k, "=", v)
	}
	fmt.Printf("-F file=@/etc/bash.bashrc ")
	fmt.Printf("%s\n", url)

输出结果

curl x-amz-signature = f5f7c8ea3f2b93df9d02192421d2b6d2c6d7ae8a02d7a86b385f08b027a9efdc
bucket = mymusic
key = myobject11
x-amz-meta-yiwuuyi = yiwuuyi123456
policy = eyJleHBpcmF0aW9uIjoiMjAyMS0wOS0xMlQwMzozNzo0Ni40ODVaIiwiY29uZGl0aW9ucyI6W1siZXEiLCIkYnVja2V0IiwibXltdXNpYyJdLFsiZXEiLCIka2V5IiwibXlvYmplY3QxMSJdLFsiZXEiLCIkeC1hbXotbWV0YS15aXd1dXlpIiwieWl3dXV5aTEyMzQ1NiJdLFsiZXEiLCIkeC1hbXotZGF0ZSIsIjIwMjEwOTAyVDAzMzc0NloiXSxbImVxIiwiJHgtYW16LWFsZ29yaXRobSIsIkFXUzQtSE1BQy1TSEEyNTYiXSxbImVxIiwiJHgtYW16LWNyZWRlbnRpYWwiLCJtaW5pb3Jvb3QvMjAyMTA5MDIvdXMtZWFzdC0xL3MzL2F3czRfcmVxdWVzdCJdLFsiY29udGVudC1sZW5ndGgtcmFuZ2UiLCAxMDI0LCAxMDczNzQxODI0XV19
x-amz-algorithm = AWS4-HMAC-SHA256
x-amz-credential = minioroot/20210902/us-east-1/s3/aws4_request
x-amz-date = 20210902T033746Z
-F file=@/etc/bash.bashrc http://127.0.0.1:9000/mymusic/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值