活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 818算力跃迁·礼遇盛夏 NEW 爆款云主机2核2G限时秒杀,28.8元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云AI产品特惠 NEW 8折特惠,新老同享不限购
  • 中小企业服务商合作专区 国家云助力中小企业腾飞,高额上云补贴重磅上线
  • 出海产品促销专区 NEW 爆款云主机低至2折,高性价比,不限新老速来抢购!
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
算力互联调度平台
  • 裸金属
训推服务
  • 模型开发
  • 训练任务
  • 服务部署
模型推理服务
  • 模型广场
  • 体验中心
  • 服务接入
应用托管
  • 应用实例
科研助手
  • 科研智能体
  • 科研服务
  • 开发机
  • 并行计算
大模型
  • DeepSeek-V3.1
  • DeepSeek-R1-0528
  • DeepSeek-V3-0324
  • Qwen3-235B-A22B
  • Qwen3-32B
  • Qwen2.5-VL-72B-Instruct
  • StableDiffusion-V2.1
智算一体机
  • 智算一体机
模型适配专家服务
  • 模型适配专家服务

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
AI应用
  • 泛微合同管理解决方案
  • 泛微数智大脑Xiaoe.AI解决方案
  • MaxKB知识库解决方案
  • 天翼AI文创
AI服务
  • 昆仑AI训推服务解决方案
  • 国信模型服务解决方案
企业应用
  • 翼电子签约解决方案
  • 翼协同解决方案
  • 翼电签-契约锁解决方案
  • 翼视频云归档解决方案
教育应用
  • 翼电子教室
  • 潜在AI教育解决方案
建站工具
  • SSL证书
  • 翼定制建站解决方案
  • 翼多端小程序解决方案
办公协同
  • 天翼云企业云盘
  • 安全邮箱
灾备迁移
  • 云管家2.0
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)

定价

协助您快速了解云产品计费模式、价格详情,轻松预估上云成本
价格计算器
  • 动态测算产品价格
定价策略
  • 快速了解计费模式

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 定价
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心
      文档中心

      媒体存储

      媒体存储

      • 媒体存储

      无数据

        • 产品动态
        • 产品介绍
        • 产品定义
        • 产品优势
        • 产品功能
        • 应用场景
        • 使用限制
        • 术语解释
        • 资源池与区域节点
        • 计费说明
        • 计费概述
        • 计费项
        • 按需计费
        • 欠费说明
        • 特殊计费场景
        • 快速入门
        • 入门流程
        • 订购指引
        • 控制台快速入门
        • 登录控制台
        • 对象存储
        • 使用流程
        • 创建存储桶
        • 上传对象
        • 下载对象
        • 删除对象
        • 块存储
        • 文件存储
        • XstorBrowser快速入门
        • 使用流程
        • 获取访问密钥
        • 获取区域节点
        • 下载并登录工具
        • 创建存储桶
        • 上传对象
        • 下载对象
        • 用户指南
        • 使用方式
        • 访问规则
        • 访问方式
        • 访问权限
        • 概述
        • 桶策略
        • ACL
        • 存储桶
        • 什么是存储桶
        • 创建存储桶
        • 其他基础操作
        • 对象
        • 什么是对象
        • 上传对象
        • 创建文件夹
        • 下载对象
        • 删除对象
        • 对象元数据
        • 其他基础操作
        • 基础配置
        • 跨域资源共享
        • 生命周期
        • 镜像回源
        • 桶清单
        • 桶标签
        • 文件解压缩
        • 数据安全
        • 防盗链
        • 合规保留
        • 版本控制
        • 服务端加密
        • 存储桶复制
        • 数据迁移
        • 概述
        • 计费说明
        • 使用说明
        • 数据监控
        • 用量统计
        • 事件通知
        • 日志存储
        • 告警管理
        • 域名管理
        • 自定义域名
        • 数据处理
        • 控制台指南
        • 登录控制台
        • 对象存储
        • 密钥管理
        • 桶管理
        • 新建Bucket
        • 基础信息查看
        • 搜索Bucket
        • 删除Bucket
        • 对象管理
        • 上传对象
        • 新建文件夹
        • 下载对象
        • 管理对象
        • 搜索对象
        • 对象标签
        • 删除对象
        • 碎片管理
        • 基础配置
        • 跨域资源共享
        • 生命周期
        • 镜像回源
        • 桶清单
        • 桶标签
        • 文件解压缩
        • 数据安全
        • 权限管理
        • 防盗链
        • 主子账号
        • IAM割接说明
        • 新建子用户
        • 子用户授权
        • 删除子用户
        • 子用户取消授权
        • 策略管理
        • STS角色管理
        • 合规保留
        • 版本控制
        • 服务端加密
        • 存储桶复制
        • 数据迁移
        • 创建迁移任务
        • 管理迁移任务
        • 数据监控
        • 事件通知
        • 日志存储
        • 告警管理
        • 域名管理
        • 自定义域名
        • 块存储
        • 新建块空间
        • 块空间管理
        • 鉴权管理
        • 扩容
        • 文件存储
        • 新建文件空间
        • 文件空间管理
        • 挂载点管理
        • 鉴权管理
        • 扩容
        • 用量统计
        • 日志管理
        • 操作日志
        • 实时日志查询
        • 订购管理
        • 数据处理指南
        • 图片处理
        • 概述
        • 使用控制台
        • 使用URL处理
        • 图片缩放
        • 格式转换
        • 旋转
        • EXIF信息
        • 质量变换
        • 亮度
        • 渐进显示
        • 模糊
        • 自定义裁剪
        • 图片水印
        • 自适应方向
        • 获取平均色调
        • 锐化
        • 对比度
        • 内切圆
        • 圆角矩形
        • 索引切割
        • 视频截帧
        • 工具指南
        • XstorBrowser
        • XstorBrowser简介与功能概述
        • 下载和安装XstorBrowser
        • 登录XstorBrowser
        • 存储桶操作
        • 创建桶
        • 查看桶的基本信息
        • 碎片管理
        • 配置桶ACL权限
        • 配置桶策略
        • 删除桶
        • 对象操作
        • 新建文件夹
        • 上传文件或文件夹
        • 编辑对象ACL
        • 搜索文件或文件夹
        • 查看对象基础信息
        • 下载文件或文件夹
        • 复制文件或文件夹
        • 剪切文件或文件夹
        • 分享文件或文件夹
        • 删除文件或文件夹
        • 任务管理
        • 本地文件同步
        • 网络测试工具
        • API参考
        • 调用前须知
        • 概述
        • 终端节点
        • 请求错误码(原生接口)
        • 请求错误码(OpenAPI)
        • API概览
        • 如何调用API
        • 认证鉴权(原生接口)
        • 信息的获取
        • 签名应用及示例(V2版本)
        • 签名应用及示例(V4版本)
        • 认证鉴权(OpenAPI)
        • 信息的获取
        • 基本签名流程
        • 签名应用源码(Java)
        • 公共HTTP头
        • API(原生接口)
        • 关于服务的操作
        • 列举桶列表
        • 关于桶的操作
        • 基础操作
        • 创建桶
        • 删除桶
        • 获取对象列表
        • 获取桶信息
        • 获取桶所在区域
        • 权限控制
        • 设置桶控制权限
        • 获取桶控制权限
        • 生命周期
        • 配置桶生命周期
        • 获取桶生命周期配置
        • 删除桶生命周期配置
        • 版本控制
        • 设置版本控制
        • 获取版本控制状态
        • 列出对象版本信息
        • 授权策略
        • 设置授权策略
        • 获取授权策略
        • 删除授权策略
        • 服务端加密
        • 配置加密规则
        • 获取加密规则
        • 删除加密规则
        • 桶标签
        • 添加或修改桶标签
        • 获取桶标签
        • 删除桶标签
        • 跨资源共享
        • 设置CORS规则
        • 获取CORS列表
        • 删除CORS规则
        • 预检Options请求
        • 关于对象的操作
        • 基础操作
        • 上传对象
        • 复制对象
        • 追加写上传
        • POST上传
        • POST上传对象
        • POST请求签名(V2版本)
        • POST请求签名(V4版本)
        • 下载对象
        • 删除对象
        • 删除多个对象
        • 获取对象元数据
        • 获取对象元信息
        • 解冻归档对象
        • 查看归档对象状态
        • 分片上传
        • 初始化分片上传
        • 分片上传文件
        • 完成分片上传
        • 拷贝分片
        • 终止分片上传
        • 获取分片上传任务列表
        • 列举上传成功分片
        • 权限控制
        • 设置对象权限列表
        • 获取对象权限列表
        • 对象标签
        • 设置对象标签
        • 获取对象标签
        • 删除对象标签
        • API(OpenAPI)
        • 关于服务的操作
        • 查询资源池
        • 列举桶列表
        • 关于桶的操作
        • 基础操作
        • 创建桶
        • 删除桶
        • 获取对象列表
        • 获取桶信息
        • 获取桶所在区域
        • 合规保留
        • 新建WORM策略
        • 删除WORM策略
        • 启用WORM策略
        • 延长WORM保留天数
        • 获取WORM策略
        • 权限控制
        • 设置桶控制权限
        • 获取桶控制权限
        • 生命周期
        • 配置桶生命周期
        • 获取桶生命周期配置
        • 删除桶生命周期配置
        • 版本控制
        • 设置版本控制
        • 获取版本控制状态
        • 列出对象版本信息
        • 授权策略
        • 设置授权策略
        • 获取授权策略
        • 删除授权策略
        • 数据复制
        • 创建复制规则
        • 获取复制规则
        • 删除复制规则
        • 桶清单
        • 配置桶清单规则
        • 获取桶清单规则
        • 批量获取桶清单规则
        • 删除桶清单规则
        • 日志管理
        • 设置日志存储规则
        • 获取日志存储规则
        • 删除日志存储规则
        • 静态网站
        • 设置静态网站托管
        • 查看静态网站托管规则
        • 删除静态网站托管
        • 防盗链
        • 设置防盗链规则
        • 查看防盗链规则
        • 服务端加密
        • 配置加密规则
        • 获取加密规则
        • 删除加密规则
        • 桶标签
        • 添加或修改桶标签
        • 获取桶标签
        • 删除桶标签
        • 跨资源共享
        • 设置CORS规则
        • 获取CORS列表
        • 删除CORS规则
        • 预检Options请求
        • 关于对象的操作
        • 基础操作
        • 上传对象
        • 复制对象
        • 追加写上传
        • POST上传
        • 下载对象
        • 删除对象
        • 删除多个对象
        • 获取对象元数据
        • 获取对象元信息
        • 解冻归档对象
        • 分片上传
        • 初始化分片上传
        • 分片上传文件
        • 完成分片上传
        • 拷贝分片
        • 终止分片上传
        • 获取分片上传任务列表
        • 列举上传成功分片
        • 权限控制
        • 设置对象权限列表
        • 获取对象权限列表
        • 对象标签
        • 设置对象标签
        • 获取对象标签
        • 删除对象标签
        • 管理类接口
        • 查询桶容量
        • 查询桶流量
        • 查询请求次数
        • 查询请求响应码返回情况
        • SDK参考
        • SDK概览
        • GO SDK
        • 环境配置
        • 初始化SDK
        • 桶相关接口
        • 对象相关接口
        • 分片上传接口
        • STS相关接口
        • Java SDK
        • SDK安装
        • 初始化SDK
        • 桶相关接口
        • 对象相关接口
        • 分片上传接口
        • STS相关接口
        • Python
        • SDK安装
        • 初始化
        • 桶相关接口
        • 对象相关接口
        • 分片上传接口
        • STS相关接口
        • C++ SDK
        • SDK安装
        • 初始化
        • 桶相关接口
        • 对象相关接口
        • 分片上传接口
        • STS相关接口
        • 常见问题
        • Node.js SDK
        • SDK安装
        • 初始化SDK
        • 桶相关接口
        • 对象相关接口
        • 分片上传接口
        • STS相关接口
        • .NET SDK
        • SDK安装
        • 环境配置
        • 桶相关接口
        • 对象相关接口
        • 分片上传接口
        • STS相关接口
        • PHP SDK
        • SDK安装
        • 初始化
        • 桶相关接口
        • 对象相关接口
        • 分片上传接口
        • STS相关接口
        • JavaScript SDK
        • SDK安装
        • 初始化SDK
        • 桶相关接口
        • 对象相关接口
        • 分片上传接口
        • STS相关接口
        • 常见问题
        • 一般性问题
        • 什么是媒体存储
        • 媒体存储有哪些适用场景
        • 媒体存储的开放范围
        • 媒体存储的持久性和可用性
        • 媒体存储的数据存储在哪里
        • 如何选择将数据存储在哪个区域
        • 媒体存储有哪些产品类型
        • 对象存储的适用场景
        • 块存储的适用场景与使用限制
        • 文件存储的适用场景与使用限制
        • 媒体存储是否支持通过HTTPS访问
        • 桶名和域名之间的关系
        • 对象存储中的数据是否可以让其他用户访问
        • 产品中的对象存储,已删除的数据是否可以恢复
        • 产品中的对象存储,文件夹与文件系统的文件夹是否一样
        • 媒体存储是否支持断点续传功能
        • 媒体存储是否提供图形化工具
        • 产品中对象存储是否支持批量上传文件
        • 产品中对象存储是否支持批量下载文件
        • 产品中对象存储是否支持批量删除对象
        • 为什么存储的数据丢失了
        • 计费常见问题
        • 媒体存储支持哪种计费方式
        • 如何订购媒体存储
        • 对象存储如何计费
        • 存储容量、流量的计算单位如何换算
        • 存储桶内无对象,为什么还会产生存储费用
        • 存储桶内无对象,为什么还会产生公网流出流量费用
        • CDN回源的流量为什么按照公网下行流量计费了
        • 欠费停服后,是否还能读取媒体存储中的文件
        • 上传对象到媒体存储产生的流量是否收费
        • 如何停用媒体存储服务或停止计费
        • 存储桶常见问题
        • 创建存储桶时,存储桶的命名规则
        • 创建存储桶后,是否可以修改存储区域
        • 用自己的域名作为桶名,为什么通过https访问的时候弹出证书有问题
        • 创建桶失败的原因
        • 存储桶如何重命名
        • 删除存储桶失败的原因
        • 存储桶标签最多可以设置多少对
        • 是否可以将存储桶A的数据迁移到存储桶B
        • 是否可以将存储桶A的数据复制到存储桶B
        • 为什么配置了跨域资源共享(CORS)仍然报错
        • 为什么通过自定义域名访问桶,提示NoSuchBucket,而通过存储桶访问域名可以访问
        • 生命周期的适用场景
        • 存储桶复制的适用场景
        • 删除对象操作会同步复制到复制的桶中吗
        • 为什么有些对象没有复制到目标桶
        • 对象常见问题
        • 对象存储中,对于同名文件,是直接覆盖还是新增不同版本的文件
        • 如何防止对象被未经授权下载
        • 如何进行批量下载
        • 是否可以找回历史版本的对象
        • 如何搜索对象存储中的对象
        • 为什么无法搜索到桶中对象
        • 已删除的数据在媒体存储中是否会有残留
        • 可以在线编辑对象吗
        • 对象标签的使用限制
        • 上传对象失败的原因
        • 下载对象失败的原因
        • 为什么无法在浏览器预览媒体存储中的对象
        • 如何查看存储桶内的文件夹大小
        • 如何获取对象访问路径
        • 文件碎片
        • 为什么会产生文件碎片
        • 如何删除文件碎片
        • 文件碎片是否会产生存储费用
        • 数据迁移
        • 数据迁移工具适用场景
        • 如何迁移其他云厂商对象存储数据到媒体存储
        • 使用数据迁移工具是否会产生费用
        • 迁移失败的对象是否可以重新迁移
        • 版本控制
        • 版本控制的适用场景
        • 是否可以上传同名文件
        • 版本控制是否会产生费用
        • 如何恢复误删除的对象
        • 数据安全
        • 后台工程师能否导出我存在媒体存储中的数据
        • 媒体存储如何保证我的数据不会被盗用
        • 在使用AK和SK访问媒体存储过程中,密钥AK和SK是否可以更换
        • 媒体存储是否支持对象加密上传
        • 如何访问或下载已加密的对象
        • 我对存储在媒体存储上的数据加密时,可支持哪些加密技术
        • 追加上传对象是否支持并发场景下的锁机制
        • 权限相关
        • 如何对媒体存储进行访问权限控制
        • 桶策略和对象策略之间的关系
        • 桶策略和ACL的关系
        • 如何确认存储桶目前的ACL权限是什么
        • 如何对存储桶的文件夹进行权限配置
        • 配置访问权限后,为什么还是返回403AccessDenied
        • 图片处理
        • 什么是图片处理
        • 如何使用图片处理
        • 图片处理有哪些使用限制
        • 支持哪些图片处理操作
        • 图片处理是否会产生费用
        • API与SDK相关
        • OpenAPI是什么
        • PUT上传和POST上传有什么区别
        • 使用媒体存储SDK上传超过5GB的大文件失败
        • 工具相关
        • 什么是XstorBrowser
        • 如何获取AK/SK
        • 如何获取EndPoint
        • XstorBrowser支持什么操作
        • 如何通过XstorBrowser同时操作两个存储区域的资源
        • 如何通过XstorBrowser分享文件
        • 最佳实践
        • 概览
        • 对象存储
        • 快速使用
        • 通过XstorBrowser访问对象存储
        • 数据安全
        • 数据安全应用场景
        • 对子用户进行桶级别的权限隔离
        • 校验上传对象的数据一致性
        • 使用服务端加密进行数据保护
        • 数据迁移与备份
        • 迁移其他云厂商数据到媒体存储
        • 通过镜像回源迁移数据到媒体存储
        • 备份存储桶
        • 操作使用
        • 通过生命周期管理对象
        • 性能优化实践
        • WEB端直传媒体存储流程优化实践
        • 移动应用使用临时凭证直传
        • 使用预签名URL直传媒体存储
        • 使用Java SDK实现断点续传
        • 块存储
        • Linux主机挂载
        • Windows主机挂载
        • 文件存储
        • NFS协议挂载
        • CIFS协议挂载
        • SMB协议挂载
        • Windows主机自动挂载CIFS
        • Linux主机自动挂载CIFS/NFS
        • 视频专区
        • 文档下载
        • 产品手册
        • 相关协议
        • 天翼云媒体存储服务协议
        • 天翼云媒体存储服务等级协议
          无相关产品

          本页目录

          帮助中心媒体存储SDK参考GO SDK对象相关接口
          对象相关接口
          更新时间 2025-09-28 10:58:17
          • 新浪微博
          • 微信
            扫码分享
          • 复制链接
          最近更新时间: 2025-09-28 10:58:17
          分享文章
          • 新浪微博
          • 微信
            扫码分享
          • 复制链接

          上传对象

          功能说明

          上传对象操作用于上传对象。如果对同一个对象同时发起多个上传请求,最后一次完成的请求将覆盖之前所有请求的上传的对象。可以通过设置请求头部中的Content-MD5字段来保证数据被完整上传,如果上传的数据不能通过MD5校验,该操作将返回一个错误提示。用户可以通过比较上传对象后获得的ETag 与原文件的MD5值是否相等来确认上传操作是否成功。

          上传对象操作在上传对象时可以在请求里携带HTTP协议规定的6个请求头:Cache-Control、Expires、Content-Encoding、Content-Disposition、Content-Type、Content-Language。如果上传对象的请求设置了这些请求头,服务端会直接将这些头域的值保存下来。这6个值也可以通过修改对象元数据操作进行修改。在该对象被下载或者执行HeadObject操作的时候,这些保存的值将会被设置到对应的HTTP头域中返回客户端。

          上传对象操作可以上传最大不超过5GB的文件,超过5GB的文件可以通过分段上传操作上传到对象存储服务,对象key的命名使用UTF-8编码,长度必须在1~1023字节之间,不能反斜线(\)开头。

          代码示例

          func PutObject(svc *s3.S3) {
              file, err := os.Open("<file-path>")
              if err != nil {
                  fmt.Printf("Unable to open file:%v", err)
                  os.Exit(1)
              }
              defer func() {
                  err := file.Close()
                  if err != nil {
                      fmt.Printf("fail to close file. %v\n", err)
                  }
              }()
          ​
              putObjectInput := &s3.PutObjectInput{
                  Body:   file,
                  Bucket: aws.String("<your-bucket-name>"),
                  Key:    aws.String("<your-object-key>"),
              }
              putObjectOutput, err := svc.PutObject(putObjectInput)
              if err != nil {
                  fmt.Printf("Failed to put object. %v", err)
              } else {
                  fmt.Println(putObjectOutput)
              }
          }

          通过PutObjectRequest操作:

          PutObjectRequest操作首先生成一个"request.Request"对象,该对象是一个执行PutObject操作的请求。通过调用Request对象的Send方法完成上传对象的操作。该方法可以生成定制化的请求,例如自定义请求头部请求超时重试设置。

          func PutObjectRequest(svc *s3.S3) {
              file, err := os.Open("exampleFile")
              if err != nil {
                  fmt.Printf("Unable to open file:%v", err)
                  os.Exit(1)
              }
              defer func() {
                  err := file.Close()
                  if err != nil {
                      fmt.Printf("fail to close file. %v\n", err)
                  }
              }()
          ​
              putObjectInput := &s3.PutObjectInput{
                  Body:   file,
                  Bucket: aws.String("<your-bucket-name>"),
                  Key:    aws.String("<your-object-key>"),
              }
              req, putObjectOutput := svc.PutObjectRequest(putObjectInput)
          ​
              err = req.Send()
              if err != nil {
                  fmt.Printf("fail to put object. %v\n", err)
              } else {
                  fmt.Println(putObjectOutput)
              }
          }

          请求参数

          PutObjectInput可设置的参数如下:

          参数类型说明是否必要
          ACL*string配置上传对象的预定义的标准ACL信息,例如private,public-read,public-read-write等。否
          Bodyio.ReadSeeker对象的数据。是
          Bucket*string执行本操作的桶名称。是
          ContentLength*int64说明请求body的长度(单位:字节),该参数可以在body长度不能被自动识别的情况下设置。否
          ContentMD5*stringbase64编码的128位MD5值,不包含请求头部的信息否
          GrantFullControl*string用于自定义用户对此对象的FULL_CONTROL权限信息。否
          GrantRead*string用于自定义用户对此对象的READ权限信息。否
          GrantReadACP*string用于自定义用户对此对象的READ_ACP权限信息。否
          GrantWrite*string用于自定义用户对此对象的WRITE权限信息。否

          GrantWriteACP

          *string用于自定义用户对此对象的WRITE_ACP权限信息。否
          Key*string上传文件到对象存储服务后对应的key。PutObject操作支持将文件上传至文件夹,如需要将对象上传至"/folder"文件下,只需要设置Key="/folder/{exampleKey}"即可。是
          Metadatamap[string]*string对象的元数据信息。否
          Tagging*string对象的标签信息,必须是URL请求参数的形式。例如,"Key1=Value1"。否
          WebsiteRedirectLocation*string如果bucket被配置用于提供网站的静态数据,该参数可以用于设置访问对象时候重定向到当前bucket下的其他对象或者外部的URL。否

          返回结果

          PutObjectOutput返回的属性如下:

          参数类型说明
          ETag*string上传对象后对应的Entity Tag
          VersionId*string上传对象后相应的版本Id。
          ServerSideEncryption*string返回对象数据加密的算法名称。

          下载对象

          功能说明

          下载对象操作可以获取对象数据,并且保存为本地文件。执行GetObject操作必须对目标Object具有READ权限。

          代码示例

          func GetObject(svc *s3.S3) {
              getObjectInput := &s3.GetObjectInput{
                  Bucket: aws.String("<your-bucket-name>"),
                  Key:    aws.String("<your-object-key>"),
              }
          ​
              getObjectOutput, err := svc.GetObject(getObjectInput)
              if err != nil {
                  fmt.Printf("Failed to get object. %v\n", err)
                  return
              }
              defer func() {
                  err := getObjectOutput.Body.Close()
                  if err != nil {
                      fmt.Printf("fail to close result body. %v\n", err)
                  }
              }()
              fmt.Println(getObjectOutput)
              // 将对象保存为本地文件
              p := make([]byte, 1024)
              filepath := "<file-path>"
              file, err := os.Create(filepath)
              if err != nil {
                  fmt.Println("fail to create file.", err)
                  return
              }
              defer func() {
                  err := file.Close()
                  if err != nil {
                      fmt.Printf("fail to close file. %v\n", err)
                  }
              }()
              for {
                  readCount, readErr := getObjectOutput.Body.Read(p)
                  _, _ = file.Write(p[:readCount])
                  if readErr != nil {
                      break
                  }
              }
          }

          通过GetObjectRequest操作获取对象:

          GetObjectRequest操作首先生成一个"request.Request"对象,该对象是一个执行GetObject操作的请求。通过调用Request对象的Send方法完成下载对象的操作。该方法可以生成定制化的请求,例如自定义请求头部请求超时重试设置。

          func GetObjectRequest(svc *s3.S3) {
              getObjectInput := &s3.GetObjectInput{
                  Bucket: aws.String("<your-bucket-name>"),
                  Key:    aws.String("<your-object-key>"),
              }
              req, getObjectOutput := svc.GetObjectRequest(getObjectInput)
          ​
              err := req.Send()
              if err != nil {
                  fmt.Printf("fail to get object. %v\n", err)
                  return
              }
              // 将对象保存为本地文件
              p := make([]byte, 1024)
              filepath := "<file-path>"
              file, err := os.Create(filepath)
              if err != nil {
                  fmt.Println("fail to create file.", err)
                  return
              }
              defer func() {
                  err := file.Close()
                  if err != nil {
                      fmt.Printf("fail to close file. %v\n", err)
                  }
              }()
              for {
                  readCount, readErr := getObjectOutput.Body.Read(p)
                  _, _ = file.Write(p[:readCount])
                  if readErr != nil {
                      break
                  }
              }
          }

          通过downloader下载对象:

          func DownloadObject(sess *session.Session) {
              filePath := "<file-path>"
              file, err := os.Create(filePath)
              if err != nil {
                  fmt.Println("fail to create file.", err)
                  return
              }
              defer func() {
                  err := file.Close()
                  if err != nil {
                      fmt.Printf("fail to close file. %v\n", err)
                  }
              }()
          ​
              downloader := s3manager.NewDownloader(sess)
              _, err = downloader.Download(file,
                  &s3.GetObjectInput{
                      Bucket: aws.String("<your-bucket-name>"),
                      Key:    aws.String("<your-object-key>"),
                  })
              if err != nil {
                  fmt.Printf("fail to download file. %v\n", err)
                  return
              }
          }

          请求参数

          GetObjectInput可设置的参数如下:

          参数类型说明是否必要
          Bucket*string执行本操作的桶名称。是
          IfMatch*string用于指定只有在对象的ETag和该参数值匹配的情况下才返回对象数据,否则返回412错误码。否
          IfModifiedSince*time.Time用于只有当对象在指定时间后被修改的情况下才返回该对象,否则返回304错误码。否
          IfNoneMatch*string用于指定只有在对象的ETag和该参数值不匹配的情况下才返回对象数据,否则返回304错误码否
          IfUnmodifiedSince*time.Time用于仅当对象自指定时间以来未被修改的情况下才返回对象数据,否则返回412错误码。否
          Key*string对象的key。是
          PartNumber*int64读取对象指定的片段,该参数大于等于1,小于等于10000。否
          Range*string下载对象指定范围内的数据(单位:字节),必须是"bytes=first-last"的格式,例如"bytes=0-9"表示前10字节的数据,详情请参见详情请参见RFC2616。否
          ResponseCacheControl*string用于设置response的Cache-Control头部字段信息。否
          ResponseContentDisposition*string用于设置response的Content-Disposition头部字段信息。否
          ResponseContentEncoding*string用于设置response的Content-Encoding头部字段信息。否
          ResponseContentLanguage*string用于设置response的Content-Language头部字段信息。否
          ResponseContentType*string用于设置response的Content-Type头部字段信息。否
          ResponseExpires*time.Time用于设置response的Expires头部字段信息。否
          VersionId*string当bucket开启版本控制的时候,用于指定获取指定版本的对象数据,当不指定该参数的时候,默认获取最新版本的对象数据。否

          返回结果

          GetObjectOutput返回的属性如下:

          参数类型说明
          Bodyio.ReadCloser对象的数据。
          ContentLength*int64对象数据的长度,单位为字节。
          ContentType*string数据的标准MIME类型。
          ETag*string对象的Entity Tag。
          LastModified*time.Time最后修改对象的时间。
          TagCount*int64对象标签的数量。
          VersionId*string对象的版本ID。
          StorageClass*string对象的存储类型。

          范围下载

          功能说明

          范围下载可以下载对象指定范围的数据,通过Range参数指定需要下载的数据范围,如果指定的下载范围为0-9,则返回对象的第1至第10字节共10字节的数据。如果指定的起始位置大于对象的大小,或者起始位置大于结束位置,则返回{416: InvalidRange}错误码。如果指定的结束位置大于对象大小,则返回从对象从起始位置开始的全部数据。

          代码示例

          func GetObject(svc *s3.S3) {
              getObjectInput := &s3.GetObjectInput{
                  Bucket: aws.String("<your-bucket-name>"),
                  Key:    aws.String("<your-object-key>"),
                  // 请求对象第1至第10字节的数据
                  Range:  aws.String("bytes=0-9"),
              }
          ​
              getObjectOutput, err := svc.GetObject(getObjectInput)
              if err != nil {
                  fmt.Printf("Failed to get object. %v\n", err)
                  return
              }
              defer func() {
                  err := getObjectOutput.Body.Close()
                  if err != nil {
                      fmt.Printf("fail to close result body. %v\n", err)
                  }
              }()
              // 将对象保存为本地文件
              p := make([]byte, 1024)
              filepath := "<file-path>"
              file, err := os.Create(filepath)
              if err != nil {
                  fmt.Println("fail to create file.", err)
                  return
              }
              defer func() {
                  err := file.Close()
                  if err != nil {
                      fmt.Printf("fail to close file. %v\n", err)
                  }
              }()
              for {
                  readCount, readErr := getObjectOutput.Body.Read(p)
                  _, _ = file.Write(p[:readCount])
                  if readErr != nil {
                      break
                  }
              }
          }

          请求参数

          GetObjectInput可设置的参数如下:

          参数类型说明是否必要
          Bucket*string执行本操作的桶名称。是
          IfMatch*string用于指定只有在对象的ETag和该参数值匹配的情况下才返回对象数据,否则返回412错误码。否
          IfModifiedSince*time.Time用于只有当对象在指定时间后被修改的情况下才返回该对象,否则返回304错误码。否
          IfNoneMatch*string用于指定只有在对象的ETag和该参数值不匹配的情况下才返回对象数据,否则返回304错误码否
          IfUnmodifiedSince*time.Time用于仅当对象自指定时间以来未被修改的情况下才返回对象数据,否则返回412错误码。否
          Key*string对象的key。是
          PartNumber*int64读取对象指定的片段,该参数大于等于1,小于等于10000。否
          Range*string下载对象指定范围内的数据(单位:字节),必须是"bytes=first-last"的格式,例如"bytes=0-9"表示前10字节的数据,详情请参见详情请参见RFC2616。否
          ResponseCacheControl*string用于设置response的Cache-Control头部字段信息。否
          ResponseContentDisposition*string用于设置response的Content-Disposition头部字段信息。否
          ResponseContentEncoding*string用于设置response的Content-Encoding头部字段信息。否
          ResponseContentLanguage*string用于设置response的Content-Language头部字段信息。否
          ResponseContentType*string用于设置response的Content-Type头部字段信息。否
          ResponseExpires*time.Time用于设置response的Expires头部字段信息。否
          VersionId*string当bucket开启版本控制的时候,用于指定获取指定版本的对象数据,当不指定该参数的时候,默认获取最新版本的对象数据。否

          返回结果

          GetObjectOutput返回的属性如下:

          参数类型说明
          Bodyio.ReadCloser对象的数据。
          ContentLength*int64对象数据的长度,单位为字节。
          ContentType*string数据的标准MIME类型。
          ETag*string对象的Entity Tag。
          LastModified*time.Time最后修改对象的时间。
          TagCount*int64对象标签的数量。
          VersionId*string对象的版本ID。
          StorageClass*string对象的存储类型。

          限定条件下载

          功能说明

          下载对象时可以设置对象的Etag和修改时间是否匹配指定值等条件,当满足限定条件时则进行下载,否则返回错误码。

          代码示例

          func GetObject(svc *s3.S3) {
              format := "2006/01/02 15:04:05"
              mtime, _ := time.Parse(format, "2023/06/15 00:00:00")
          ​
              getObjectInput := &s3.GetObjectInput{
                  Bucket: aws.String("<your-bucket-name>"),
                  Key:    aws.String("<your-object-key>"),
                  // 当对象Etag等于指定值时才下载
                  IfMatch: aws.String("781e5e245d69b566979b86e28d23f2c7"),
                  // 当对象的修改时间大于指定值时才下载
                  IfModifiedSince: &mtime,
              }
          ​
              getObjectOutput, err := svc.GetObject(getObjectInput)
              if err != nil {
                  fmt.Printf("Failed to get object. %v\n", err)
                  return
              }
              defer func() {
                  err := getObjectOutput.Body.Close()
                  if err != nil {
                      fmt.Printf("fail to close result body. %v\n", err)
                  }
              }()
          ​
              // 将对象保存为本地文件
              p := make([]byte, 1024)
              filepath := "<file-path>"
              file, err := os.Create(filepath)
              if err != nil {
                  fmt.Println("fail to create file.", err)
                  return
              }
              defer func() {
                  err := file.Close()
                  if err != nil {
                      fmt.Printf("fail to close file. %v\n", err)
                  }
              }()
              for {
                  readCount, readErr := getObjectOutput.Body.Read(p)
                  _, _ = file.Write(p[:readCount])
                  if readErr != nil {
                      break
                  }
              }
          }

          请求参数

          GetObjectInput可设置的参数如下:

          参数类型说明是否必要
          Bucket*string执行本操作的桶名称。是
          IfMatch*string用于指定只有在对象的ETag和该参数值匹配的情况下才返回对象数据,否则返回412错误码。否
          IfModifiedSince*time.Time用于只有当对象在指定时间后被修改的情况下才返回该对象,否则返回304错误码。否
          IfNoneMatch*string用于指定只有在对象的ETag和该参数值不匹配的情况下才返回对象数据,否则返回304错误码否
          IfUnmodifiedSince*time.Time用于仅当对象自指定时间以来未被修改的情况下才返回对象数据,否则返回412错误码。否
          Key*string对象的key。是
          PartNumber*int64读取对象指定的片段,该参数大于等于1,小于等于10000。否
          Range*string下载对象指定范围内的数据(单位:字节),必须是"bytes=first-last"的格式,例如"bytes=0-9"表示前10字节的数据,详情请参见详情请参见RFC2616。否
          ResponseCacheControl*string用于设置response的Cache-Control头部字段信息。否
          ResponseContentDisposition*string用于设置response的Content-Disposition头部字段信息。否
          ResponseContentEncoding*string用于设置response的Content-Encoding头部字段信息。否
          ResponseContentLanguage*string用于设置response的Content-Language头部字段信息。否
          ResponseContentType*string用于设置response的Content-Type头部字段信息。否
          ResponseExpires*time.Time用于设置response的Expires头部字段信息。否
          VersionId*string当bucket开启版本控制的时候,用于指定获取指定版本的对象数据,当不指定该参数的时候,默认获取最新版本的对象数据。否

          返回结果

          GetObjectOutput返回的属性如下:

          参数类型说明
          Bodyio.ReadCloser对象的数据。
          ContentLength*int64对象数据的长度,单位为字节。
          ContentType*string数据的标准MIME类型。
          ETag*string对象的Entity Tag。
          LastModified*time.Time最后修改对象的时间。
          TagCount*int64对象标签的数量。
          VersionId*string对象的版本ID。
          StorageClass*string对象的存储类型。

          复制对象

          功能说明

          复制对象操作用于创建一个已经在对象存储中的对象。复制对象可以拷贝单个最大为5GB的对象,如果需要拷贝更大的对象,可以使用复制段操作。执行复制对象操作,必须具有对被拷贝对象的READ权限和对目标桶的WRITE权限。

          拷贝生成的对象默认保留原对象的元数据信息,也可以在复制对象操作中指定新的元数据。拷贝生成的对象不会保留原来的ACL信息,该对象默认是发起复制对象操作的用户私有的。

          复制对象操作默认拷贝原对象的当前版本数据,如果需要拷贝原对象的指定版本,可以在复制对象时加入version id来拷贝指定的对象版本,如果原对象的version id为删除标记,则不会被拷贝。如果目标bucket开启了版本控制,那么拷贝生成的对象会有一个与原对象不同的唯一的version id,并且会在响应头部字段 x-amz-version-id中返回该version id。

          代码示例

          func CopyObject(svc *s3.S3) {
              copyObjectInput := &s3.CopyObjectInput{
                  Bucket:     aws.String("<your-bucket-name>"),
                  CopySource: aws.String("<copy-source>"),
                  Key:        aws.String("<your-object-key>"),
              }
          ​
              copyObjectOutput, err := svc.CopyObject(copyObjectInput)
              if err != nil {
                  fmt.Printf("fail to copy object. %v\n", err)
              }
              fmt.Println(copyObjectOutput)
          }

          通过CopyObjectRequest操作:

          CopyObjectRequest操作首先生成一个"request.Request"对象,该对象是一个执行CopyObject操作的请求。通过调用Request对象的Send方法来完成拷贝对象操作。该方法可以生成定制化的请求,例如自定义请求头部请求超时重试设置。

          func CopyObjectRequest(svc *s3.S3) {
              copyObjectInput := &s3.CopyObjectInput{
                  Bucket:     aws.String("<your-bucket-name>"),
                  CopySource: aws.String("<copy-source>"),
                  Key:        aws.String("<your-object-key>"),
              }
              req, copyObjectOutput := svc.CopyObjectRequest(copyObjectInput)
          ​
              err := req.Send()
              if err != nil {
                  fmt.Printf("fail to copy object. %v\n", err)
              } else {
                  fmt.Println(copyObjectOutput)
              }
          }

          请求参数

          CopyObjectInput可设置的参数如下:

          参数类型说明是否必要
          ACL*string拷贝后对象的预定义的标准ACL信息,例如private,public-read,public-read-write等。否
          Bucket*string存放拷贝生成对象的桶名称。是
          CopySource*stringURL格式的拷贝对象数据来源,包含了桶名称和对象key的信息,二者之间使用正斜杆(/)分割,versionId可选参数用于指定原对象的版本。例如,"foo/boo?versionId=11111"表示拷贝foo桶中的boo对象,其版本id为11111。如果不指定versionId参数,则默认拷贝当前版本的对象数据。是
          GrantFullControl*string用于为用户配置被拷贝对象的FULL_CONTROL权限信息。否
          GrantRead*string用于为用户配置被拷贝对象的READ权限信息。否
          GrantReadACP*string用于为用户配置被拷贝对象的READ_ACP权限信息。否
          GrantWriteACP*string用于为用户配置被拷贝对象的WRITE_ACP权限信息。否
          Key*string拷贝生成对象对应的key。是
          Metadatamap[string]*string拷贝生成对象的元数据信息。否
          MetadataDirective*string指定拷贝生成的对象的元数据信息来自被拷贝对象,还是来自请求中附带的信息。否
          Tagging*string拷贝生成对象的标签信息,必须是URL请求参数的形式。例如,"Key1=Value1"。否
          TaggingDirective*string用于说明拷贝生成对象的标签信息是来自被拷贝对象,还是来自请求中附带的信息。否
          WebsiteRedirectLocation*string如果bucket被配置用于提供网站的静态数据,该参数可以用于设置访问对象时候重定向到当前bucket下的其他对象或者外部的URL。否

          返回结果

          CopyObjectOutput返回的属性如下:

          参数类型说明
          CopyObjectResult*CopyObjectResult包含拷贝生成对象的Entity Tag和最后修改时间等信息。

          删除对象

          功能说明

          删除对象操作用于删除指定的一个对象。对于开启版本控制的桶执行 删除对象操作时,如果未指定version id ,则保留对象的当前版本,并插入删除标记(Delete Marker)。如果指定version id,则永久删除该指定版本的对象。如果在未指定version id的情况下执行删除对象操作时,默认仅作用于对象的当前版本,但不会直接删除该对象的当前版本,而是插入一个删除标记(Delete Marker),并保留原来的当前版本。当访问对象时,服务端会检测到当前版本为删除标记,并返回404 Not Found。

          代码示例

          func DeleteObject(svc *s3.S3) {
              deleteObjectInput := &s3.DeleteObjectInput{
                  Bucket: aws.String("<your-bucket-name>"),
                  Key:    aws.String("<your-object-key>"),
              }
          ​
              deleteObjectOutput, err := svc.DeleteObject(deleteObjectInput)
              if err != nil {
                  fmt.Printf("Failed to delete object. %v\n", err)
              } else {
                  fmt.Println(deleteObjectOutput)
              }
          }

          通过DeleteObjectRequest操作:

          DeleteObjectRequest操作首先生成一个"request.Request"对象,该对象是一个执行DeleteObject操作的请求。通过调用Request对象的Send方法完成删除对象的操作。该方法可以生成定制化的请求,例如自定义请求头部请求超时重试设置。

          func DeleteObjectRequest(svc *s3.S3) {
              deleteObjectInput := &s3.DeleteObjectInput{
                  Bucket: aws.String("<your-bucket-name>"),
                  Key:    aws.String("<your-object-key>"),
              }
              req, deleteObjectOutput := svc.DeleteObjectRequest(deleteObjectInput)
          ​
              err := req.Send()
              if err != nil {
                  fmt.Printf("fail to delete object. %v\n", err)
              } else {
                  fmt.Println(deleteObjectOutput)
              }
          }

          请求参数

          DeleteObjectInput可设置的参数如下:

          参数类型说明是否必要
          Bucket*string执行本操作的桶名称。是
          Key*string对象的key。是
          VersionId*string用于指定要删除对象的versionId否

          返回结果

          DeleteObjectOutput返回的属性如下:

          参数类型说明
          DeleteMarker*bool有效值为true。在桶开启版本控制的情况下,执行DeleteObject 操作时如果未指定对象的版本Id,会创建删除标记,此时DeleteMarker为true。如果指定对象的版本Id来永久删除指定对象版本时,若该版本Id是删除标记,则DeleteMarker为true。
          VersionId*string执行DeleteObject操作时如果未指定对象的版本Id,会创建删除标记,VersionId为删除标记的版本Id。 如果指定版本Id来永久删除对象指定版本时,返回的VersionId为对象的版本Id。

          批量删除对象

          功能说明

          (本接口目前仅支持部分资源池使用;如需使用,请联系天翼云客服确认。)

          DeleteObjects操作可以实现通过一个HTTP请求批量删除多个对象的功能,可以减少发起多起请求去删除大量对象的花销。DeleteObjects操作发起一个包含了最多1000个key的删除请求,对象存储服务会对相应的对象逐个进行删除,并且将删除成功或者失败的结果通过response返回。如果请求删除的对象不存在,会返回已删除的结果。

          DeleteObjects操作返回verbose 和quiet两种response模式。 verbose response是默认的返回模式,该模式的返回结果包含了每个key的删除结果。quiet response返回模式返回的结果仅包含了删除失败的key,对于一个完全成功的删除操作,该返回模式不在相应消息体中返回任何信息。

          代码示例

          func DeleteObjects(svc *s3.S3) {
              deleteObjectsInput := &s3.DeleteObjectsInput{
                  Bucket: aws.String("<your-bucket-name>"),
                  Delete: &s3.Delete{
                      Objects: []*s3.ObjectIdentifier{
                          {
                              Key: aws.String("exampleKey1"),
                          },
                          {
                              Key: aws.String("exampleKey2"),
                          },
                      },
                      Quiet: aws.Bool(false),
                  },
              }
          ​
              deleteObjectsOutput, err := svc.DeleteObjects(deleteObjectsInput)
              if err != nil {
                  fmt.Printf("Failed to delete objects. %v\n", err)
              } else {
                  fmt.Println(deleteObjectsOutput)
              }
          }

          通过DeleteObjectsRequest操作:

          DeleteObjectsRequest操作首先生成一个"request.Request"对象,该对象是一个执行DeleteObjects操作的请求。通过调用Request对象的Send方法完成批量删除对象的操作。该方法可以生成定制化的请求,例如自定义请求头部请求超时重试设置。

          func DeleteObjectsRequest(svc *s3.S3) {
              deleteObjectsInput := &s3.DeleteObjectsInput{
                  Bucket: aws.String("<your-bucket-name>"),
                  Delete: &s3.Delete{
                      Objects: []*s3.ObjectIdentifier{
                          {
                              Key: aws.String("exampleKey1"),
                          },
                          {
                              Key: aws.String("exampleKey2"),
                          },
                      },
                      Quiet: aws.Bool(false),
                  },
              }
              req, deleteObjectsOutput := svc.DeleteObjectsRequest(deleteObjectsInput)
          ​
              err := req.Send()
              if err != nil {
                  fmt.Printf("fail to delete objects. %v\n", err)
              } else {
                  fmt.Println(deleteObjectsOutput)
              }
          }

          请求参数

          DeleteObjectsInput可设置的参数如下:

          参数类型说明是否必要
          Bucket*string执行本操作的桶名称。是
          Delete*Delete封装了要删除对象信息(Key、VersionId)和删除模式等信息是

          返回结果

          DeleteObjectsOutput返回的属性如下:

          参数类型说明
          Deleted[]*DeletedObject被删除对象信息的数组,数组中每一项包含了一个被成功删除的对象的信息,包括删除标记、对象key和版本id等信息。
          Errors[]*Error删除失败的对象信息的数组,数组中每一项包含了一个删除失败的对象的信息,包括错误码、

          获取对象元数据

          功能说明

          获取对象元数据操作用于获取对象的元数据信息。执行该操作需要具有对该对象的READ权限,请求参数与下载对象操作一样,区别在于获取对象元数据操作响应体中没有body部分。

          代码示例

          func HeadObject(svc *s3.S3) {
              headObjectInput := &s3.HeadObjectInput{
                  Bucket: aws.String("<your-bucket-name>"),
                  Key:    aws.String("<your-object-key>"),
              }
          ​
              headObjectOutput, err := svc.HeadObject(headObjectInput)
              if err != nil {
                  fmt.Printf("fail to head object. %v\n", err)
                  return
              }
              fmt.Printf("object info: %v\n", headObjectOutput)
          }

          通过HeadObjectRequest操作:

          HeadObjectRequest操作首先生成一个"request.Request"对象,该对象是一个执行HeadObject操作的请求。通过调用Request对象的Send方法完成获取对象元数据信息的操作。该方法可以生成定制化的请求,例如自定义请求头部请求超时重试设置。

          func HeadObjectRequest(svc *s3.S3) {
              headObjectInput := &s3.HeadObjectInput{
                  Bucket: aws.String("<your-bucket-name>"),
                  Key:    aws.String("<your-object-key>"),
              }
              req, headObjectOutput := svc.HeadObjectRequest(headObjectInput)
          ​
              err := req.Send()
              if err != nil {
                  fmt.Printf("fail to head object. %v\n", err)
              } else {
                  fmt.Println(headObjectOutput)
              }
          }

          请求参数

          HeadObjectInput可设置的参数如下:

          参数类型说明是否必要
          Bucket*string执行本操作的桶名称。是
          IfMatch*string用于指定只有在对象的ETag和该参数值匹配的情况下才返回对象数据,否则返回412错误码。否
          IfModifiedSince*time.Time用于只有当对象在指定时间后被修改的情况下才返回该对象,否则返回304错误码。否
          IfNoneMatch*string用于指定只有在对象的ETag和该参数值不匹配的情况下才返回对象数据,否则返回304错误码否
          IfUnmodifiedSince*time.Time用于仅当对象自指定时间以来未被修改的情况下才返回对象数据,否则返回412错误码。否
          Key*string对象的key。是
          PartNumber*int64读取对象指定的片段,该参数大于等于1,小于等于10000。否
          Range*string指定对象的数据范围(单位:字节),必须是"bytes=first-last"的格式,例如"bytes=0-9"表示前10字节的数据,详情请参见RFC2616。否
          VersionId*string当bucket开启版本控制的时候,用于指定获取指定版本的对象数据,当不指定该参数的时候,默认获取最新版本的对象数据。否

          返回结果

          HeadObjectOutput返回的属性如下:

          参数类型说明
          ContentLength*int64本次请求返回对象数据的大小(单位:字节)。
          ContentType*string对象文件格式的标准MIME类型
          ETag*string对象的Entity Ttag
          LastModified*time.Time最近一次修改对象的时间。
          VersionId*string对象最新的版本ID。
          StorageClass*string对象的存储类型。

          设置对象ACL

          功能说明

          设置对象ACL操作可以为对象存储服务中的对象设置访问权限,设置对象ACL操作需要具有对象的WRITE_ACP权限,执行操作的时候,要么使用封装好的ACL数据类型传入ACL信息,要么以字符串的形式详细描述ACL信息。

          对象的访问权限说明:

          权限类型说明
          READ可以读取对象的数据和元数据信息。
          READ_ACP可以读取对象的ACL信息。对象的拥有者默认具有对象的READ_ACP权限。
          WRITE可以修改原有对象数据和删除对象。
          WRITE_ACP可以修改对象的ACL信息,授予该权限相当于授予FULL_CONTROL权限,因为具有WRITE_ACP权限的用户可以配置对象的任意权限。对象的拥有者默认具有WRITE_ACP权限。
          FULL_CONTROL同时授予READ、READ_ACP、WRITE和WRITE_ACP。

          代码示例

          func PutObjectAcl(svc *s3.S3) {
              bucket := "<your-bucket-name>"
              key := "<your-object-key>"
              permission := "READ" // FULL_CONTROL、WRITE、WRITE_ACP、READ、READ_ACP
              granteeDisplayName := "<your-display-name>"
              granteeId := "<your-user-id>"
              userType := "CanonicalUser"
              // 获取当前acl
              getObjectAclOutput, err := svc.GetObjectAcl(&s3.GetObjectAclInput{
                  Bucket: aws.String(bucket),
                  Key:    aws.String(key),
              })
              if err != nil {
                  fmt.Printf("fail to get acl of object %v, %v\n", key, err)
                  os.Exit(1)
              }
              // 创建一个新的授权信息
              var newGrantee = s3.Grantee{
                  Type:        aws.String(userType),
                  DisplayName: aws.String(granteeDisplayName),
                  ID:          aws.String(granteeId),
              }
              var newGrant = s3.Grant{Grantee: &newGrantee, Permission: &permission}
              grants := getObjectAclOutput.Grants
              owner := *getObjectAclOutput.Owner.DisplayName
              ownerId := *getObjectAclOutput.Owner.ID
              grants = append(grants, &newGrant)
              // 设置对象的ACL
              putObjectAclInput := &s3.PutObjectAclInput{
                  AccessControlPolicy: &s3.AccessControlPolicy{
                      Grants: grants,
                      Owner: &s3.Owner{
                          DisplayName: &owner,
                          ID:          &ownerId,
                      },
                  },
                  Bucket: aws.String(bucket),
                  Key:    aws.String(key),
              }
          ​
              putObjectAclOutput, err := svc.PutObjectAcl(putObjectAclInput)
              if err != nil {
                  fmt.Printf("fail to put objec acl. %v\n", err)
                  return
              }
              fmt.Println(putObjectAclOutput)
          }

          通过PutObjectAclRequest操作:

          PutObjectAclRequest操作首先生成一个"request.Request"对象,该对象是一个执行PutObjectAcl操作的请求。通过调用Request对象的Send方法来设置对象的ACL信息。该方法可以生成定制化的请求,例如自定义请求头部请求超时重试设置。

          func PutObjectAclRequest(svc *s3.S3) {
              bucket := "<your-bucket-name>"
              key := "<your-object-key>"
              permission := "READ_ACP" // FULL_CONTROL、WRITE、WRITE_ACP、READ、READ_ACP
              granteeDisplayName := "<your-display-name>"
              granteeId := "<your-user-id>"
              userType := "CanonicalUser"
              // 获取当前acl
              currentACL, err := svc.GetObjectAcl(&s3.GetObjectAclInput{
                  Bucket: aws.String(bucket),
                  Key:    aws.String(key),
              })
              if err != nil {
                  fmt.Printf("fail to get acl of object %v, %v\n", key, err)
                  os.Exit(1)
              }
              // 创建一个新的授权信息
              var newGrantee = s3.Grantee{
                  Type:        aws.String(userType),
                  DisplayName: aws.String(granteeDisplayName),
                  ID:          aws.String(granteeId),
              }
              var newGrant = s3.Grant{Grantee: &newGrantee, Permission: &permission}
              grants := currentACL.Grants
              owner := *currentACL.Owner.DisplayName
              ownerId := *currentACL.Owner.ID
              grants = append(grants, &newGrant)
              // 设置对象的ACL
              putObjectAclInput := &s3.PutObjectAclInput{
                  AccessControlPolicy: &s3.AccessControlPolicy{
                      Grants: grants,
                      Owner: &s3.Owner{
                          DisplayName: &owner,
                          ID:          &ownerId,
                      },
                  },
                  Bucket: aws.String(bucket),
                  Key:    aws.String(key),
              }
              req, putObjectAclOutput := svc.PutObjectAclRequest(putObjectAclInput)
          ​
              err = req.Send()
              if err != nil {
                  fmt.Printf("fail to put object ACL. %v\n", err)
              } else {
                  fmt.Println(putObjectAclOutput)
              }
          }

          请求参数

          PutObjectAclInput可设置的参数如下:

          参数类型说明是否必要
          ACL*string配置对象预定义的标准ACL信息,例如private,public-read,public-read-write等。否
          AccessControlPolicy*AccessControlPolicy配置该对象对于每个用户的ACL授权信息。否
          Bucket*string执行本操作的桶名称。是
          GrantFullControl*string配置对象的FULL_CONTROL权限信息。否
          GrantRead*string配置对象的READ权限信息。否
          GrantReadACP*string配置对象ACL的READ权限信息。否
          GrantWrite*string配置对象的WRITE权限信息。否
          GrantWriteACP*string配置对象ACL的WRITE权限信息。否
          Key*string设置ACL信息的对象的key。是
          VersionId*string设置ACL信息的对象的versionId否

          获取对象ACL

          功能说明

          获取对象ACL操作可以获取对象的access control list(ACL)信息。对一个对象执行获取ACL操作需要具有READ_ACP权限。

          代码示例

          func GetObjectAcl(svc *s3.S3) {
              getObjectAclInput := &s3.GetObjectAclInput{
                  Bucket: aws.String("<your-bucket-name>"),
                  Key:    aws.String("<your-object-key>"),
              }
          ​
              getObjectAclOutput, err := svc.GetObjectAcl(getObjectAclInput)
              if err != nil {
          ​
                  return
              }
              fmt.Println(getObjectAclOutput)
          }

          通过GetObjectAclRequest操作:

          GetObjectAclRequest操作首先生成一个"request.Request"对象,该对象是一个执行GetObjectAcl操作的请求。通过调用Request对象的Send方法来获取对象的ACL信息。该方法可以生成定制化的请求,例如自定义请求头部请求超时重试设置。

          func GetObjectAclRequest(svc *s3.S3) {
              getObjectAclInput := &s3.GetObjectAclInput{
                  Bucket: aws.String("<your-bucket-name>"),
                  Key:    aws.String("<your-object-key>"),
              }
              req, getObjectAclOutput := svc.GetObjectAclRequest(getObjectAclInput)
          ​
              err := req.Send()
              if err != nil {
                  fmt.Printf("fail to get object ACL. %v\n", err)
              } else {
                  fmt.Println(getObjectAclOutput)
              }
          }

          请求参数

          GetObjectAclInput可设置的参数如下:

          参数类型说明是否必要
          Bucket*string对象所在桶的名称。是
          Key*string对象的key。是
          VersionId*string对象的版本Id否

          返回结果

          GetObjectAclOutput返回的属性如下:

          参数类型说明
          Grants[]*Grant授权信息数组,数组中每一项描述了权限被授予者的用户类型、用户名、邮箱地址、用户Id、用户组和授予权限类型等信息。
          Owner*Owner对象所在桶的拥有者信息,包含了用户名和用户Id等信息。

          设置对象属性

          功能说明

          在上传对象时可以设置对象的属性,对象属性以key-value的形式描描述。

          代码示例

          func PutObjectWithMetadata(svc *s3.S3) {
              putObjectInput := &s3.PutObjectInput{
                  Body:   strings.NewReader("<object-data>"),
                  Bucket: aws.String("<your-bucket-name>"),
                  Key:    aws.String("<your-object-key>"),
                  Metadata: map[string]*string{
                      "<metadata1>": aws.String("<value1>"),
                      "<metadata2>": aws.String("<value2>"),
                  },
              }
              putObjectOutput, err := svc.PutObject(putObjectInput)
              if err != nil {
                  fmt.Printf("Failed to put object. %v", err)
              } else {
                  fmt.Println(putObjectOutput)
              }
          }

          请求参数

          PutObjectInput可设置的参数如下:

          参数类型说明是否必要
          ACL*string配置上传对象的预定义的标准ACL信息,例如private,public-read,public-read-write等。否
          Bodyio.ReadSeeker对象的数据。是
          Bucket*string执行本操作的桶名称。是
          ContentLength*int64说明请求body的长度(单位:字节),该参数可以在body长度不能被自动识别的情况下设置。否
          ContentMD5*stringbase64编码的128位MD5值,不包含请求头部的信息否
          GrantFullControl*string用于自定义用户对此对象的FULL_CONTROL权限信息。否
          GrantRead*string用于自定义用户对此对象的READ权限信息。否
          GrantReadACP*string用于自定义用户对此对象的READ_ACP权限信息。否
          GrantWrite*string用于自定义用户对此对象的WRITE权限信息。否
          GrantWriteACP*string用于自定义用户对此对象的WRITE_ACP权限信息。否
          Key*string上传文件到对象存储服务后对应的key。PutObject操作支持将文件上传至文件夹,如需要将对象上传至"/folder"文件下,只需要设置Key="/folder/{exampleKey}"即可。是
          Metadatamap[string]*string对象的元数据信息。否
          Tagging*string对象的标签信息,必须是URL请求参数的形式。例如,"Key1=Value1"。否
          WebsiteRedirectLocation*string如果bucket被配置用于提供网站的静态数据,该参数可以用于设置访问对象时候重定向到当前bucket下的其他对象或者外部的URL。否

          返回结果

          PutObjectOutput返回的属性如下:

          参数类型说明
          ETag*string上传对象后对应的Entity Tag
          VersionId*string上传对象后相应的版本Id。

          设置对象标签

          功能说明

          设置对象标签操作可以为对象设置标签,标签是一个键值对,每个对象最多可以有10个标签。桶的拥有者默认拥有给桶中的对象设置标签的权限,并且可以将权限授予其他用户。

          每次执行设置对象标签操作会覆盖对象已有的标签信息。每个对象最多可以设置10个标签,标签Key和Value区分大小写,并且Key不可重复。每个标签的Key长度不超过128字节,Value长度不超过255字节。通过HTTP header的方式设置标签且标签中包含任意字符时,需要对标签的Key和Value做URL编码。设置对象标签信息不会更新对象的最新更改时间。

          代码示例

          func PutObjectTagging(svc *s3.S3) {
              putObjectTaggingInput := &s3.PutObjectTaggingInput{
                  Bucket: aws.String("<your-bucket-name>"),
                  Key:    aws.String("<your-object-key>"),
                  Tagging: &s3.Tagging{
                      TagSet: []*s3.Tag{
                          {
                              Key:   aws.String("<key1>"),
                              Value: aws.String("<value1>"),
                          },
                          {
                              Key:   aws.String("<key2>"),
                              Value: aws.String("<value2>"),
                          },
                      },
                  },
              }
              putObjectTaggingOutput, err := svc.PutObjectTagging(putObjectTaggingInput)
              if err != nil {
                  fmt.Printf("fail to put object tagging. %v\n", err)
                  return
              }
              fmt.Println(putObjectTaggingOutput)
          }

          通过PutObjectTaggingRequest操作:

          PutObjectTaggingRequest操作首先生成一个"request.Request"对象,该对象是一个执行PutObjectTaggingRequest操作的请求。通过调用Request对象的Send方法来设置对象的标签信息。该方法可以生成定制化的请求,例如自定义请求头部请求超时重试设置。

          func PutObjectTaggingRequest(svc *s3.S3) {
              putObjectTaggingInput := &s3.PutObjectTaggingInput{
                  Bucket: aws.String("<your-bucket-name>"),
                  Key:    aws.String("<your-object-key>"),
                  Tagging: &s3.Tagging{
                      TagSet: []*s3.Tag{
                          {
                              Key:   aws.String("<key1>"),
                              Value: aws.String("<value1>"),
                          },
                          {
                              Key:   aws.String("<key2>"),
                              Value: aws.String("<value2>"),
                          },
                      },
                  },
              }
              req, putObjectTaggingOutput := svc.PutObjectTaggingRequest(putObjectTaggingInput)
          ​
              err := req.Send()
              if err != nil {
                  fmt.Printf("fail to put object tagging. %v\n", err)
              } else {
                  fmt.Println(putObjectTaggingOutput)
              }
          }

          请求参数

          PutObjectTaggingInput可设置的参数如下:

          参数类型说明是否必要
          Bucket*string执行本操作的桶名称。是
          Key*string设置标签信息的对象的key。是
          Tagging*Tagging设置的标签信息,包含了一个Tag结构体的数组,每个Tag以Key-Value的形式说明了标签的内容。是
          VersionId*string设置标签信息的对象的版本Id否

          获取对象标签

          功能说明

          获取对象标签操作可以查询对象的标签信息,标签是一个键值对,每个对象最多可以有10个标签。桶的拥有者默认拥有查询桶中对象的标签的权限,并且可以将权限授予其他用户。

          代码示例

          func GetObjectTagging(svc *s3.S3) {
              getObjectTaggingInput := &s3.GetObjectTaggingInput{
                  Bucket: aws.String("<your-bucket-name>"),
                  Key:    aws.String("<your-object-key>"),
              }
          ​
              getObjectTaggingOutput, err := svc.GetObjectTagging(getObjectTaggingInput)
              if err != nil {
                  fmt.Printf("fail to get object tagging. %v\n", err)
                  return
              }
              fmt.Println(getObjectTaggingOutput)
          }

          通过GetObjectTaggingRequest操作:

          GetObjectTaggingRequest操作首先生成一个"request.Request"对象,该对象是一个执行GetObjectTaggingRequest操作的请求。通过调用Request对象的Send方法来完成获取对象标签信息的操作。该方法可以生成定制化的请求,例如自定义请求头部请求超时重试设置。

          func GetObjectTaggingRequest(svc *s3.S3) {
              getObjectTaggingInput := &s3.GetObjectTaggingInput{
                  Bucket: aws.String("<your-bucket-name>"),
                  Key:    aws.String("<your-object-key>"),
              }
              req, getObjectTaggingOutput := svc.GetObjectTaggingRequest(getObjectTaggingInput)
          ​
              err := req.Send()
              if err != nil {
                  fmt.Printf("fail to get object tagging. %v\n", err)
              } else {
                  fmt.Println(getObjectTaggingOutput)
              }
          }

          请求参数

          GetObjectTaggingInput可设置的参数如下:

          参数类型说明是否必要
          Bucket*string执行本操作的桶名称。是
          Key*string想获取标签信息的对象的key。是
          VersionId*string想获取标签信息的对象的版本Id否

          返回结果

          GetObjectTaggingOutput返回的属性如下:

          参数类型说明
          TagSet[]*Tag对象标签信息数组,数组中的每一项包含了标签Key和Value的值。

          删除对象标签

          功能说明

          删除对象标签操作可以删除一个对象的全部标签信息,删除时可以设置版本Id参数删除指定版本对象的标签信息,如果不设置版本Id,则默认删除当前版本的对象标签信息。

          代码示例

          func DeleteObjectTagging(svc *s3.S3) {
              deleteObjectTaggingInput := &s3.DeleteObjectTaggingInput{
                  Bucket: aws.String("<your-bucket-name>"),
                  Key:    aws.String("<your-object-key>"),
              }
          ​
              deleteObjectTaggingOutput, err := svc.DeleteObjectTagging(deleteObjectTaggingInput)
              if err != nil {
                  fmt.Printf("fail to delete object tagging. %v\n", err)
                  return
              }
              fmt.Println(deleteObjectTaggingOutput)
          }

          通过DeleteObjectTaggingRequest操作:

          DeleteObjectTaggingRequest操作首先生成一个"request.Request"对象,该对象是一个执行DeleteObjectTagging操作的请求。通过调用Request对象的Send方法来删除对象的标签信息。该方法可以生成定制化的请求,例如自定义请求头部请求超时重试设置。

          func DeleteObjectTaggingRequest(svc *s3.S3) {
              deleteObjectTaggingInput := &s3.DeleteObjectTaggingInput{
                  Bucket: aws.String("<your-bucket-name>"),
                  Key:    aws.String("<your-object-key>"),
              }
              req, deleteObjectTaggingOutput := svc.DeleteObjectTaggingRequest(deleteObjectTaggingInput)
          ​
              err := req.Send()
              if err != nil {
                  fmt.Printf("fail to delete object tagging. %v\n", err)
              } else {
                  fmt.Println(deleteObjectTaggingOutput)
              }
          }

          请求参数

          DeleteObjectTaggingInput可设置的参数如下:

          参数类型说明是否必要
          Bucket*string执行本操作的桶名称。是
          Key*string被删除标签信息的对象的key。是
          VersionId*string被删除标签信息的对象的versionId否

          服务端加密

          功能说明

          上传对象时可以指定对象的加密算法,即使设置桶的加密配置也可以加密请求上传的对象数据,服务端根据指定的加密算法对对象数据进行加密。目前支持AES256和国密SM4加密算法。

          代码示例

          func PutObjectWithEncryption(svc *s3.S3) {
              putObjectInput := &s3.PutObjectInput{
                  Body:                 strings.NewReader("<object-data>"),
                  Bucket:               aws.String("<your-bucket-name>"),
                  Key:                  aws.String("<your-object-key>"),
                  ServerSideEncryption: aws.String("AES256"),
              }
              putObjectOutput, err := svc.PutObject(putObjectInput)
              if err != nil {
                  fmt.Printf("Failed to put object. %v", err)
              } else {
                  fmt.Println(putObjectOutput)
              }
          }

          请求参数

          PutObjectInput可设置的参数如下:

          参数类型说明是否必要
          ACL*string配置上传对象的预定义的标准ACL信息,例如private,public-read,public-read-write等。否
          Bodyio.ReadSeeker对象的数据。是
          Bucket*string执行本操作的桶名称。是
          ContentLength*int64说明请求body的长度(单位:字节),该参数可以在body长度不能被自动识别的情况下设置。否
          ContentMD5*stringbase64编码的128位MD5值,不包含请求头部的信息否
          GrantFullControl*string用于自定义用户对此对象的FULL_CONTROL权限信息。否
          GrantRead*string用于自定义用户对此对象的READ权限信息。否
          GrantReadACP*string用于自定义用户对此对象的READ_ACP权限信息。否
          GrantWrite*string用于自定义用户对此对象的WRITE权限信息。否
          GrantWriteACP*string用于自定义用户对此对象的WRITE_ACP权限信息。否
          Key*string上传文件到对象存储服务后对应的key。PutObject操作支持将文件上传至文件夹,如需要将对象上传至"/folder"文件下,只需要设置Key="/folder/{exampleKey}"即可。是
          Metadatamap[string]*string对象的元数据信息。否
          ServerSideEncryption*string指定服务端采用的加密算法,如AES256、SM4。否
          Tagging*string对象的标签信息,必须是URL请求参数的形式。例如,"Key1=Value1"。否
          WebsiteRedirectLocation*string如果bucket被配置用于提供网站的静态数据,该参数可以用于设置访问对象时候重定向到当前bucket下的其他对象或者外部的URL。否

          返回结果

          PutObjectOutput返回的属性如下:

          参数类型说明
          ETag*string上传对象后对应的Entity Tag
          VersionId*string上传对象后相应的版本Id。
          ServerSideEncryption*string返回对象数据加密的算法名称。

          生成预签名上传链接

          功能说明

          本接口能够为一个指定对象生成一个预签名的上传链接,访问该链接可以直接上传该对象。

          代码示例

          以下代码演示如何为一个指定对象生成一个预签名的上传链接。

          func generatePresignedPut(svc *s3.S3) {
              req, _ := p.svc.PutObjectRequest(&s3.PutObjectInput{
                  Bucket: aws.String("<your-bucket-name>"),
                  Key:    aws.String("<your-object-key>"),
              })
              expires := 5 * time.Minute
              urlStr, err := req.Presign(expires)
              if err != nil {
                  fmt.Println("Failed to generate presigned URL:", err)
              }else {
                  fmt.Println("Generated upload URL:", urlStr)
              }
          }

          通过该预签名URL,可以直接将文件上传到指定的桶:

          func (p *S3Demo) putObjUsingPresignedUrl(url string, filePath string) error {
              file, err := os.Open(filePath)
              if err != nil {
                  return fmt.Errorf("failed to open file %s: %w", filePath, err)
              }
              defer file.Close()
          ​
              // 读取文件内容并获取长度
              fileData, err := ioutil.ReadAll(file)
              if err != nil {
                  return fmt.Errorf("failed to read file data: %w", err)
              }
              contentLength := len(fileData)
          ​
              // 创建 PUT 请求
              req, err := http.NewRequest("PUT", url, bytes.NewReader(fileData))
              if err != nil {
                  return fmt.Errorf("failed to create request: %w", err)
              }
          ​
              // 设置 Content-Length
              req.Header.Set("Content-Length", fmt.Sprintf("%d", contentLength))
              req.ContentLength = int64(contentLength)
          ​
              client := &http.Client{}
              resp, err := client.Do(req)
              if err != nil {
                  return fmt.Errorf("failed to upload file: %w", err)
              }
              defer resp.Body.Close()
          ​
              if resp.StatusCode != http.StatusOK {
                  bodyBytes, _ := io.ReadAll(resp.Body)
                  return fmt.Errorf("failed to upload file, status: %s, response: %s", resp.Status, string(bodyBytes))
              }
          ​
              fmt.Println("Successfully uploaded file to:", url)
              return nil
          }

          请求参数

          参数类型说明是否必要
          Bucket*stringbucket的名称是
          Key*string对象的key是
          Expirestime.Duration超时时间是

          返回结果

          生成对应的预签名上传 URL,该链接允许用户在指定的时间内直接将对象上传到媒体存储存储桶。

          生成预签名下载链接

          功能说明

          本接口能够为一个指定对象生成一个预签名的下载链接,访问该链接可以直接下载该对象。

          代码示例

          以下代码演示如何为一个指定对象生成一个预签名的下载链接。

          func GetObjectPresignedUrl(svc *s3.S3) {
              getObjectInput := &s3.GetObjectInput{
                  Bucket: aws.String("<your-bucket-name>"),
                  Key:    aws.String("<your-object-key>"),
              }
              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,可以直接下载对象。

          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
          }

          请求参数

          参数类型说明是否必要
          Bucket*stringbucket的名称是
          Key*string对象的key是
          Expirestime.Duration超时时间是

          返回结果

          生成对应的预签名下载 URL,该链接允许用户在指定的时间内直接从媒体存储下载对象。

           

          文档反馈

          建议您登录后反馈,可在建议与反馈里查看问题处理进度

          鼠标选中文档,精准反馈问题

          选中存在疑惑的内容,即可快速反馈问题,我们会跟进处理

          知道了

          上一篇 :  桶相关接口
          下一篇 :  分片上传接口
          搜索 关闭
          ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
          公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
          备案 京公网安备11010802043424号 京ICP备 2021034386号
          ©2025天翼云科技有限公司版权所有
          京ICP备 2021034386号
          备案 京公网安备11010802043424号
          增值电信业务经营许可证A2.B1.B2-20090001
          用户协议 隐私政策 法律声明