使用预签名URL直传对象存储
更新时间 2025-12-12 22:16:04
最近更新时间: 2025-12-12 22:16:04
本文基于 golang 和 bash 介绍如何通过预签名 URL 直传对象存储。
操作背景
对象存储 SDK 提供的预签名接口可用于生成预签名 URL 。移动端应用可通过预签名 URL 直接上传或下载文件,不需要配备 SDK 和密钥。
操作流程
客户服务器配置好密钥等信息,通过 SDK 生成预签名 URL,随后移动端应用基于预签名 URL 构造 HTTP 请求进行上传或下载操作。
代码示例
相关代码片段如下所示。
生成预签名上传URL
请求示例
func PresignPutObjectRequest(s3c *s3.S3) {
bucket := "example-bucket"
key := "example-key"
input := &s3.PutObjectInput{
Bucket: aws.String(bucket),
Key: aws.String(key),
}
// 构造请求
request, _ := s3c.PutObjectRequest(input)
// 设定预签名链接过期时间
expire := 15 * time.Minute
// 预签名请求
output, err := request.Presign(expire)
if err != nil {
fmt.Printf("* Status: Fail\n* Output:\n%v\n* Error:\n%v\n", output, err)
} else {
fmt.Printf("* Status: Susccess\n* Output:\n%v\n", output)
}
}
响应示例
生成的预签名 URL 见 Output 部分。
* Status: Susccess
* Output:
https://jiangsu-10.zos.ctyun.cn/example-bucket/example-key?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=XXXXXXXXXXXXXXXXXXXX%2F20241217%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20000101T123414Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x
应用示例
基于预签名 URL 构造如下 HTTP 请求即可上传对象到对象存储。
curl -X PUT -T your_local_file_name 'your_presign_url'
生成预签名下载URL
请求示例
func PresignGetObjectRequest(s3c *s3.S3) {
bucket := "example-bucket"
key := "example-key"
input := &s3.GetObjectInput{
Bucket: aws.String(bucket),
Key: aws.String(key),
}
// 构造请求
request, _ := s3c.GetObjectRequest(input)
// 设定预签名链接过期时间
expire := 15 * time.Minute
// 预签名请求
output, err := request.Presign(expire)
if err != nil {
fmt.Printf("* Status: Fail\n* Output:\n%v\n* Error:\n%v\n", output, err)
} else {
fmt.Printf("* Status: Susccess\n* Output:\n%v\n", output)
}
}
响应示例
生成的预签名 URL 见 Output 部分。
* Status: Susccess
* Output:
https://jiangsu-10.zos.ctyun.cn/example-bucket/example-key?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=XXXXXXXXXXXXXXXXXXXX%2F20241217%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20000101T123414Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x
应用示例
基于预签名 URL 构造如下 HTTP 请求即可下载对象到本地。
curl -Lo your_local_file_name 'your_presign_url'