对象相关接口 请求参数 参数 类型 说明 是否必要 Bucket string bucket的名称 是 Key string 对象的key 是 Expires time.Duration 超时时间 是 返回结果 生成对应的预签名上传 URL,该链接允许用户在指定的时间内直接将对象上传到媒体存储存储桶。 生成预签名下载链接 功能说明 本接口能够为一个指定对象生成一个预签名的下载链接,访问该链接可以直接下载该对象。 代码示例 以下代码演示如何为一个指定对象生成一个预签名的下载链接。 plaintext func GetObjectPresignedUrl(svc s3.S3) { getObjectInput : &s3.GetObjectInput{ Bucket: aws.String(" "), Key: aws.String(" "), } req, : svc.GetObjectRequest(getObjectInput) expires : 10 time.Minute urlStr, err : req.Presign(expires) if err ! nil { fmt.Println("err, ", err) return } fmt.Println("success, ", urlStr) } 通过该URL,可以直接下载对象。 plaintext func (p S3Demo) getObjectUsingPresignedUrl(url string, downloadPath string) error { // 发送 GET 请求以下载对象 resp, err : http.Get(url) if err ! nil { return fmt.Errorf("failed to download file: %w", err) } defer resp.Body.Close() // 检查响应状态是否成功 if resp.StatusCode ! http.StatusOK { bodyBytes, : io.ReadAll(resp.Body) return fmt.Errorf("failed to download file, status: %s, response: %s", resp.Status, string(bodyBytes)) } // 创建目标文件以保存下载内容 outFile, err : os.Create(downloadPath) if err ! nil { return fmt.Errorf("failed to create file %s: %w", downloadPath, err) } defer outFile.Close() // 将响应内容写入文件 , err io.Copy(outFile, resp.Body) if err ! nil { return fmt.Errorf("failed to save file: %w", err) } fmt.Println("Successfully downloaded file to:", downloadPath) return nil }