MinioGolangSDK使用学习3
使用预签名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/