Object管理

对象存储 BOS

  • 产品公告
  • 功能发布记录
  • 产品描述
    • 使用限制
    • 产品优势
    • 应用场景
    • 产品功能
    • 产品简介
    • 核心概念
    • 分级存储介绍
      • 为什么会有分级存储
      • 存储类型介绍
  • S3
    • 兼容签名认证
    • 兼容接口
    • 兼容公共头
    • 兼容工具
    • 服务域名
    • 概述
  • 控制台操作指南
    • 查看并导出用量数据
    • 图片审核服务
    • 在线数据导入
    • 事件通知及数据处理
    • 操作准备
    • 配置BOS多用户访问控制
    • 联动百度网盘分享
    • 文件自动解压
    • 图片服务
    • 智能业务分析
    • 收藏路径
    • 分层命名空间存储桶操作说明
    • 额度管理
    • 统计与监控
    • 管理Bucket
      • 数据访问趋势分析
      • 设置跨域访问
      • Bucket概览
      • 请求者付费
      • 设置日志查询
      • 创建Bucket
      • Bucket额度管理
      • 删除Bucket
      • 管理Bucket标签
      • 设置回收站
      • 设置静态网站托管
      • 设置访问日志
      • 设置存储空间清单
      • 设置数据同步
      • 设置Referer白名单
      • 设置合规保留
      • 设置版本控制
      • 设置镜像回源
      • 设置服务端加密
      • 查询Bucket
      • 管理生命周期
        • 配置智能分层
        • 配置基础生命周期管理
        • 概述
        • 基础生命周期管理使用说明
          • 基于最后一次修改时间的生命周期规则
          • 基于最后一次访问时间的生命周期规则
      • 设置Bucket读写权限
        • 权限介绍
        • 设置Bucket读写权限
    • 管理Object
      • 设置文件权限
      • 文件夹分享
      • Select扫描
      • 分享文件-获取文件url
      • 对象标签
      • 设置Meta信息
      • 管理文件夹
      • 批量删除文件夹
      • 上传文件
      • 碎片管理
      • 下载文件
      • 转换文件存储类型
      • 重命名文件
      • 复制和移动文件
      • 删除文件
      • 文件夹统计
      • 取回归档文件
      • 查询Object
      • 批量管理Object
      • 设置软链接
    • 全局设置
      • VPC访问控制
    • 数据发布
      • 配置CDN上行加速
      • 创建Bucket自定义域名
      • 数据发布简介
      • 查看Bucket官方域名
      • 开通CDN官方加速域名
      • 配置缓存管理
      • 全球加速
  • 相关协议
    • 百度智能云对象存储联动百度网盘使用协议
  • 开发者指南
    • 基本概念
    • Region与Endpoint
    • 图像审核
    • 静态网站托管
    • 开发准备
    • 单链接限速
    • 监控服务操作
    • 事件通知
    • 数据容灾
      • 数据同步
      • 多AZ存储
    • 数据安全
      • 最小权限原则
      • 设置回收站
      • 设置防盗链
      • 设置服务端加密
      • 版本控制
        • 版本控制概述
        • 删除标记
      • 权限控制
        • IAM主子用户访问控制
        • Object权限控制
        • Bucket权限控制
    • 数据湖接入
      • 分层命名空间
      • 元数据转换服务
    • Bucket基本操作
      • 查看Bucket列表
      • 获取Bucket地域信息
      • 创建Bucket
      • 删除Bucket
      • 设置跨域资源共享
      • 设置访问日志
      • 数据发布
      • 管理生命周期
      • 设置Bucket标签
    • 数据生命周期管理
      • 智能业务分析
    • 数据发布
      • CDN加速发布
      • 绑定自定义域名
    • 数据迁移上云
      • 本地数据上云
      • 从其他云迁移
      • 场景概述
    • Object基本操作
      • 下载数据
        • 简单下载
        • 断点续传下载
      • 管理文件
        • 查看文件列表
        • Select扫描
        • 对象标签
        • 拷贝数据
        • 获取数据元信息
        • 删除数据
      • 上传数据
        • 上传回调
        • 追加上传
        • 表单上传
        • 分块及断点续传
        • 简单上传
  • 管理Bucket
    • Bucket概览
    • 请求者付费
    • 创建Bucket
    • Bucket额度管理
    • 删除Bucket
    • 管理Bucket标签
    • 设置回收站
    • 设置静态网站托管
    • 设置访问日志
    • 设置存储空间清单
    • 设置数据同步
    • 设置Referer白名单
    • 设置合规保留
    • 设置镜像回源
    • 设置服务端加密
    • .Archive
      • 设置跨域访问
      • Bucket概览
      • 请求者付费
      • 创建Bucket
      • Bucket额度管理
      • 删除Bucket
      • 管理Bucket标签
      • 设置回收站
      • 设置静态网站托管
      • 设置访问日志
      • 设置存储空间清单
      • 设置数据同步
      • 设置Referer白名单
      • 设置合规保留
      • 设置镜像回源
      • 设置服务端加密
      • 查询Bucket
    • 设置Bucket读写权限
      • 权限介绍
      • 设置Bucket读写权限
      • .Archive
        • 权限介绍
        • 设置Bucket读写权限
  • 数据处理
    • 图像处理名词解释
    • 视频即时转码
    • 获取视频元信息
    • 数据处理介绍
    • 视频截帧
    • 图像审核
    • 数据处理常见问题
    • 文档预览
    • 音视频处理
    • 智能识别
      • 概述
    • 图像通用设置
      • 原图保护
    • 图像处理指南V1.0
      • 质量变换
      • 格式转换
      • 获取图片信息
      • 使用规则
      • 水印
      • 图像缩略
      • 图像旋转
      • 渐近显示
      • 图像裁剪
    • 图像处理指南V2.0
      • 图像缩放
      • 质量变换
      • 格式转换
      • 图片模糊
      • 获取图片信息
      • 去除元信息
      • 图象缩放
      • 使用规则
      • 图片对比度
      • 图片亮度
      • 渐近显示
      • 图片锐化
      • 灰度变换
      • 智能处理
        • 智能处理使用规则
        • 智能效果
          • 智能去雾
          • 智能清晰度
          • 智能对比度
          • 智能调色
        • 智能场景
          • 拉伸恢复
          • 黑白上色
          • 物体擦除
          • 人像动漫化
          • 天空分隔
          • 风格转换
          • 无损放大
      • 图像水印
        • 添加图文混合水印
        • 添加图片水印
        • 添加文字水印
      • 图像旋转
        • 自适应旋转
        • 普通旋转
      • 图像裁剪
        • 索引裁剪
        • 内切圆裁剪
        • 圆角矩形裁剪
        • 普通裁剪
  • 内容审核
    • 图像审核
    • 视频审核
  • 周边工具
    • BOS-FTP工具
    • fsspec-bosfs
    • 周边工具概述
    • BOS-AlluxioExtension工具
    • 下载专区
    • BOS-PC客户端
      • 安装及登录
      • 使用指南
      • 常见问题
    • Docker
      • 概述
    • BOS-CLI命令行工具(旧版本)
      • 通过CLI使用BOS服务
      • 安装BOSCLI
      • 配置BOSCLI
      • 版本变更记录
      • 概述
    • BOS-HDFS工具
      • 配置和使用
      • 概述
      • 大数据组件使用指南
        • Presto使用指南
        • Hive使用指南
        • Flink使用指南
        • Impala使用指南
        • Spark使用指南
        • Flume数据存储到BOS
        • DataX读写BOS
    • BOS-CMD命令行工具
      • BOSCMD版本变更记录
      • 常见问题
      • 通过CMD使用BOS服务
      • 配置BOSCMD
      • 配置BCECMD命令行补全功能
      • BOS CMD常见问题
      • 安装BOSCMD
      • 概述
    • 第三方工具
      • rclone
      • S3 Browser
      • MinIO
      • 其他工具
      • Goofys
    • BOS-API生成工具
      • 概述
      • 图像审核服务接口
        • 图像审核接口
      • Bucket数据同步相关接口
        • 列举Bucket的所有replication同步规则
        • 设置Bucket数据同步
        • 获取Bucket数据同步信息
        • 获取Bucket指定id数据同步的进程状态
        • 删除Bucket的指定id的同步复制配置
      • 如何调用API
        • 鉴权认证
        • 构造请求
        • 返回响应
      • Service相关接口
        • 列举存储桶
        • 额度管理
          • 删除用户的额度设置
          • 设置用户的额度
          • 获取用户的额度信息
      • Object相关接口
        • 软链接
          • 创建软链接
          • 获取软链接
        • 基础操作
          • 获取对象的meta信息
          • 抓取Object并存储到Bucket中
          • 删除多个Object
          • 删除Object
          • 获取对象
          • 取回归档文件
        • 权限控制
          • 设置Object的访问权限
          • 获取Object的访问权限
          • 删除Object的访问权限
        • Select扫描
          • 向Object执行Sql语句
      • Bucket相关接口
        • 静态网站
          • 删除bucket的静态网站托管信息
          • 设置静态网站托管
          • 获取bucket的静态网站托管信息
        • 数据加密
          • 关闭bucket的服务端加密功能
          • 开启bucket的加密开关
          • 判断bucket的加密是否打开
        • 日志管理
          • 获取Bucket的访问日志配置
          • 开启Bucket的访问日志
          • 关闭Bucket的访问日志配置
        • 跨域访问
          • 获取指定Bucket上设定一个跨域资源共享规则
          • 在指定Bucket上设定一个跨域资源共享规则
          • 关闭指定Bucket上设定一个跨域资源共享规则
        • 基础操作
          • 获取bucket所在的区域
          • 创建存储桶
          • 删除存储桶
          • 查看Bucket是否存在和请求者是否有权限访问这个Bucket
          • 列举存储桶下的Object
          • 获取Bucket的默认存储类型
          • 列举存储桶
          • 跨域查询
          • 设置Bucket的默认存储类型
        • 事件通知
          • 推送ImageOcr和ImageClassify消息
          • 删除Bucket的通知规则
          • 获取Bucket的通知规则
          • 推送事件消息
          • 设置Bucket通知规则
        • 权限控制
          • 获取Bucket的访问权限
          • 设置Bucket的访问权限
        • 原图保护
          • 获取Bucket的原图保护配置情况
          • 开启Bucket的原图保护功能
          • 关闭Bucket的原图保护配置情况
        • 回收站
          • 开通Bucket回收站功能
          • 获取Bucket回收站的开通状态
          • 关闭Bucket回收站功能
        • 生命周期
          • 设置Bucket的生命周期
          • 获取Bucket的生命周期管理规则
          • 删除Bucket的生命周期管理规则
        • 合规保留
          • 锁定Bucket合规保留策略
          • 初始化合规保留策略
          • 删除合规保留策略
          • 获取Bucket合规保留策略
          • 延迟Bucket的合规保留策略保护周期
    • BOS-Probe错误检测工具
      • 通过BOSProbe检查上传下载
      • 安装BOSProbe
      • 建议及报告查看
      • 概述
    • BOS-FS挂载工具
      • 配置
      • 版本变更记录
      • 常见问题
      • 操作与实践
      • 安装
      • 概述
    • BOS Connector for PyTorch
      • 构建 Dataset
      • 读写 Checkpoint
      • 配置 BOS Connector for Pytorch
      • 功能及使用说明
      • 安装 BOS Connector for Pytorch
      • 性能测试
      • 概述
    • BOS-Util批量操作工具
      • 通过BOS-Util使用BOS服务
      • 版本变更记录
      • 安装BOS-Util
      • 概述
    • BOS-Import数据上云工具
      • 版本记录
      • 配置文件
      • 异常处理
      • 部署方式
      • 日志
      • 任务进度恢复
      • 概述
    • 月光宝盒物理迁移设备
      • 月光宝盒介绍
      • 月光宝盒操作流程
  • 安全与合规
    • 监控审计
    • 数据保护
    • 数据容灾
    • 访问控制
    • 数据保留合规
    • 数据加密
    • 概述
  • 快速入门
    • 开始使用BOS
    • 获取Object
    • 上传Object
    • 创建Bucket
    • 快速入门流程
    • 删除Object
    • 删除Bucket
  • 典型实践
    • 如何解决浏览器跨域CORS问题
    • CDN动态加速上传数据到BOS
    • 混合云中使用专线-VPN访问BOS
    • 通过安卓SDK使用HTTPDNS服务
    • 基于BOS的Presto实践
    • 将 BOS 作为 Jfrog Artifactory 的后端存储服务
    • 防盗链
    • BOS专线回源IDC最佳实践
    • AWS-lambda同步S3数据到BOS
    • 客户端加密实践
    • 基于BOS的Impala实践
    • 使用CDN加速BOS
    • HTTPS传输加密实践
    • 手机美图APP实践
      • 代码示例
      • 方案实践——搭建美图APP
      • 方案实践——使用美图APP
      • 概述及场景介绍
    • Python API请求访问BOS
      • PUT请求上传文件到Bucket
      • 基础(必看):鉴权字符串生成
      • GET请求下载Bucket文件到本地
    • Web数据直传至BOS
      • 基础篇:在浏览器中直接上传文件到BOS
      • 原理篇三:STS临时认证
      • 原理篇二:大文件分块上传
      • 原理篇一:在浏览器中直接上传文件到BOS
      • 进阶篇二:通过PostObject接口处理IE低版本
      • 进阶篇一:STS临时认证
    • 数据迁移
      • 场景简介
      • 三方云数据迁移到BOS
      • 本地数据迁移到BOS
  • SDK
    • SDK概览
    • Harmony-SDK
      • 异常处理
      • 日志
      • 版本变更记录
      • 初始化
      • 安装SDK工具包
      • 概述
      • Object管理
        • Object的分块上传
        • 获取Object
        • 上传Object
        • 删除Object
        • Object权限控制
        • 拷贝Object
        • 查看Bucket中的Object
      • Bucket管理
        • 查看Bucket列表
        • 新建Bucket
        • Bucket存储类型设置与查询
        • 判断Bucket是否存在
        • 删除Bucket
        • 查看Bucket所属的区域
        • Bucket权限控制
    • Ruby-SDK
      • 异常处理
      • 版本变更记录
      • sdk日志
      • 初始化
      • 安装SDK工具包
      • 概述
      • 文件管理
        • 查看文件是否存在
        • 列举存储空间中的文件
        • 上传文件
        • 获取及更新文件元信息
        • Object权限控制
        • 下载文件
        • 变更文件存储等级
        • 拷贝Object
        • 获取文件下载URL
        • 删除文件
      • Bucket管理
        • 新建Bucket
        • 判断Bucket是否存在
        • 删除Bucket
        • 查看Bucket所属的区域
        • Bucket权限管理
        • 列举Bucket
        • 概述
    • Python-SDK
      • 异常处理
      • 版本变更记录
      • 常见问题
      • 日志控制
      • 初始化
      • 安装SDK工具包
      • 概述
      • 文件管理
        • 查看文件是否存在
        • 列举存储空间中的文件
        • 上传文件
        • 获取及更新文件元信息
        • 取回归档存储类型文件
        • Object权限控制
        • 下载文件
        • 选取文件
        • 变更文件存储等级
        • 拷贝Object
        • 获取文件下载URL
        • 软链接
        • 删除文件
      • Bucket管理
        • Bucket跨域资源访问
        • 新建Bucket
        • 用户额度管理
        • 镜像回源
        • 数据同步
        • 判断Bucket是否存在
        • 获取回收站开通信息
        • 删除Bucket
        • 原图保护
        • 查看Bucket所属的区域
        • 设置Bucket存储类型
        • 关闭回收站
        • Bucket回收站
        • 日志管理
        • bucket清单管理
        • Bucket权限管理
        • 列举Bucket
        • Bucket生命周期管理
        • 事件通知
        • 概述
    • JavaScript-SDK
      • 安装SDK
      • 版本变更记录
      • 初始化
      • Bucket管理
      • 额度管理
      • 概述
      • Object管理
        • Object的分块上传
        • 获取Object
        • 上传Object
        • 删除Object
        • 获取文件URL
        • 拷贝Object
        • 查看Bucket中的Object
      • Bucket管理
        • 查看Bucket列表
        • 新建Bucket
        • Bucket日志管理
        • 判断Bucket是否存在
        • 删除Bucket
        • 查看Bucket所属的区域
        • 设置Bucket存储类型
        • 数据同步配置
        • Bucket权限管理
        • Bucket生命周期管理
        • 概述
    • Android-SDK
      • 异常处理
      • 日志
      • Object管理
      • 版本变更记录
      • 初始化
      • Bucket管理
      • 安装SDK工具包
      • 概述
      • 文件管理
        • Object的分块上传
        • 获取Object
        • 上传Object
        • 删除Object
        • Object权限控制
        • 拷贝Object
        • 查看Bucket中的Object
      • Bucket管理
        • 查看Bucket列表
        • 新建Bucket
        • 判断Bucket是否存在
        • 删除Bucket
        • Bucket权限控制
    • Java-SDK
      • 数据处理及使用
      • 异常处理
      • 版本变更记录
      • 常见问题
      • sdk日志
      • 初始化
      • Bucket管理
      • 安装SDK工具包
      • 文件管理
      • 概述
      • 文件管理
        • 拷贝文件
        • 查看文件是否存在
        • 对象标签
        • 列举存储空间中的文件
        • 上传文件
        • 获取及更新文件元信息
        • 取回归档存储类型文件
        • Object权限控制
        • 下载文件
        • 选取文件
        • 变更文件存储等级
        • 获取文件下载URL
        • 获取目录容量概览
        • 删除文件
      • Bucket管理
        • 新建Bucket
        • Bucket静态网站托管
        • 镜像回源
        • 标签管理
        • 判断Bucket是否存在
        • 删除Bucket
        • 原图保护
        • 查看Bucket所属的区域
        • 设置Bucket存储类型
        • Bucket数据同步
        • 设置Bucket服务端加密
        • Bucket权限管理
        • 回收站
        • 列举Bucket
        • 概述
    • IOS-SDK
      • 异常处理
      • 日志
      • Object管理
      • 版本变更记录
      • 初始化
      • Bucket管理
      • 安装SDK工具包
      • 概述
      • 文件管理
        • Object的分块上传
        • 获取Object
        • 上传Object
        • 删除Object
        • 拷贝Object
        • 查看Bucket中的Object
      • Bucket管理
        • 查看Bucket列表
        • 新建Bukcet
        • 删除Bucket
        • Bucket权限控制
        • 判断Bucket是否存在,以及是否有权限访问
    • GO-SDK
      • 数据处理及使用
      • 版本变更记录
      • 请求管理
      • sdk日志
      • 初始化
      • Bucket管理
      • 错误处理
      • 安装SDK工具包
      • 文件管理
      • 概述
    • C-Dotnet-SDK
      • 异常处理
      • Object管理
      • 版本变更记录
      • 初始化
      • Bucket管理
      • 安装SDK工具包
      • 概述
    • PHP-SDK
      • 异常处理
      • 版本变更记录
      • 初始化
      • Bucket管理
      • 安装SDK工具包
      • 文件管理
      • 概述
    • C-SDK
      • 异常处理
      • 版本变更记录
      • 初始化
      • 安装sdk工具包
      • 概述
      • 文件管理
        • 拷贝文件
        • 查看文件是否存在
        • 获取文件下载链接
        • 列举存储空间中的文件
        • 上传文件
        • 获取及更新元数据信息
        • Object权限控制
        • 下载文件
        • 变更文件存储等级
        • 归档存储
        • 删除文件
      • Bucket管理
        • 新建bucket
        • 删除bucket
        • 判断bucket 是否存在
        • 列举bucket
        • 概述
    • C++-SDK
      • 异常处理
      • 版本变更记录
      • sdk日志
      • 初始化
      • 安装SDK工具包
      • 概述
      • 文件管理
        • 拷贝文件
        • 查看文件是否存在
        • Object标签管理
        • 列举存储空间中的文件
        • 上传文件
        • 获取及更新文件元信息
        • Object权限控制
        • 下载文件
        • 变更文件存储等级
        • 获取文件下载URL
        • 归档存储
        • 删除文件
      • 请求管理
        • 中断取消请求
      • Bucket管理
        • 新建Bucket
        • 判断Bucket是否存在
        • 删除Bucket
        • 查看Bucket所属的区域
        • Bucket权限管理
        • 列举Bucket
        • 概述
  • 服务等级协议SLA
    • BOS服务等级协议SLA(V3.0)
    • 百度智能云对象存储可信云认证
  • API参考
    • 音视频处理接口
    • 访问控制
    • 简介
    • 接口规范
    • 上传回调
    • 错误码
    • 图像审核服务接口
      • 水印二维码识别(watermark)
      • 公众人物识别(public)
      • 暴恐识别(terror)
      • 恶心图识别(disgust)
      • 色情识别(antiporn)
      • 政治人物识别(politician)
      • 图像质量识别(quality)
      • 人脸探测(face)
      • 接口描述
      • 通用文字识别(ocr)
    • 分片上传相关接口
      • AbortMultipartUpload
      • ListMultipartUploads
      • ListParts
      • 使用指南
      • UploadPart
      • InitiateMultipartUpload
      • UploadPartCopy
      • CompleteMultipartUpload
    • Service相关接口
      • ListBuckets
      • 额度管理
        • DeleteUserQuota
        • PutUserQuota
        • GetUserQuota
    • Object相关接口
      • 软链接
        • GetSymlink
        • PutSymlink
      • 基础操作
        • CopyObject
        • ListObjects
        • FetchObject
        • GetObjectMeta
        • PostObject
        • listObjectVersions
        • DeleteObject
        • PutObject
        • AppendObject
        • DeleteMultipleObjects
        • RestoreObject
        • GetObject
        • OPTIONSObject
      • 权限控制
        • GetObjectAcl
        • PutObjectAcl
        • DeleteObjectAcl
      • Select扫描
        • SelectObject
      • 对象标签
        • PutObjectTagging
        • GetObjectTagging
        • DeleteObjectTagging
    • Bucket相关接口
      • 镜像回源
        • PutBucketMirroring
        • DeleteBuketMirroring
        • GetBucketMirroring
      • 静态网站
        • PutBucketStaticWebsite
        • DeleteBucketStaticWebsite
        • GetBucketStaticWebsite
      • 数据加密
        • GetBucketEncryption
        • DeleteBucketEncryption
        • PutBucketEncryption
      • 数据同步
        • GetBucketReplicationProgress
        • ListBucketReplication
        • GetBucketReplication
        • PutBucketReplication
        • DeleteBucketReplication
      • 日志管理
        • DeleteBucketLogging
        • GetBucketLogging
        • PutBucketLogging
      • 请求者付费
        • GetBucketRequestPayment
        • PutBucketRequestPayment
      • 跨域访问
        • GetBucketCors
        • PutBucketCors
        • DeleteBucketCors
      • 版本控制
        • PutBucketVersioning
        • GetBucketVersioning
      • 基础操作
        • GetBucketLocation
        • HeadBucket
        • PutBucketStorageclass
        • PutBucket
        • GetBucketStorageClass
        • DeleteBucket
      • 事件通知
        • PostResult
        • DeleteNotification
        • PostEvent
        • GetNotification
        • PutNotification
      • 权限控制
        • PutBucketAcl
        • GetBucketAcl
      • 额度管理
        • PutBucketQuota
        • GetBucketQuota
        • DeleteBucketQuota
      • 原图保护
        • PutBucketCopyrightProtection
        • GetCopyrightProtection
        • DeleteCopyrightProtection
      • 标签管理
        • PutBucketTagging
        • DeleteBucketTagging
        • GetBucketTagging
      • 回收站
        • DeleteBucketTrash
        • GetBucketTrash
        • PutBucketTrash
      • 存储桶清单
        • GetBucketInventory
        • ListBucketInventory
        • DeleteBucketInventory
        • PutBucketInventory
      • 生命周期
        • DeleteBucketLifecycle
        • GetBucketLifecycle
        • PutBucketLifecycle
      • 合规保留
        • ExtendBucketObjectLock
        • DeleteBucketObjectLock
        • CompleteBucketObjectLock
        • InitBucketObjectLock
        • GetBucketObjectLock
  • 常见问题
    • 数据迁移与备份
    • 认证及权限管理
    • 计费类问题
    • API&SDK&工具
    • Bucket访问及管理
    • 图片服务
    • 分析与统计
    • 一般类问题
    • 常见问题总览
    • 性能类问题
    • 安全类问题
    • 存储桶域名请求风格
    • Object上传下载及管理
  • 数据魔方
    • 批量处理
    • zip打包压缩
    • 智能数据处理
      • 图像处理
        • 图像处理介绍
        • 图像处理名词解释
        • 图像处理常见问题
        • 图像通用设置
          • 原图保护
        • 图像处理指南V1.0
          • 质量变换
          • 格式转换
          • 获取图片信息
          • 使用规则
          • 水印
          • 图像缩略
          • 图像旋转
          • 渐近显示
          • 图像裁剪
        • 图像处理指南V2.0
          • 图像缩放
          • 质量变换
          • 格式转换
          • 图片模糊
          • 获取图片信息
          • 去除元信息
          • 使用规则
          • 图片对比度
          • 图片亮度
          • 图片异常检测
          • 图片处理持久化
          • 渐近显示
          • 图像盲水印
          • 图片压缩
          • 失败返回原图
          • 图片锐化
          • 灰度变换
          • 智能处理
            • 智能处理使用规则
            • 智能效果
              • 智能去雾
              • 智能清晰度
              • 智能对比度
              • 智能调色
            • 智能场景
              • 拉伸恢复
              • 黑白上色
              • 物体擦除
              • 人像动漫化
              • 天空分隔
              • 风格转换
              • 无损放大
          • 图像水印
            • 添加图文混合水印
            • 添加图片水印
            • 添加文字水印
          • 图像旋转
            • 自适应旋转
            • 普通旋转
          • 图像裁剪
            • 索引裁剪
            • 内切圆裁剪
            • 圆角矩形裁剪
            • 普通裁剪
      • 文档处理
        • 文档预览
      • 视频处理
        • 视频即时转码
        • 获取视频元信息
        • 视频截帧
        • 音视频处理
        • M3U8签名
  • 视频专区
    • BOS分级存储
    • 通过域名访问BOS资源
    • 了解BOS
    • Object上传
  • 产品定价
    • 余额不足和欠费提醒
    • 查看消费明细
    • 计费案例
    • 计费常见问题
    • 计费项介绍
      • 流量费用
      • 计费项概览
      • 存储费用
      • 数据处理费用
      • 请求费用
    • 产品价格
      • 资源包价格清单
      • 按需计费方式
      • 资源包价格清单-废弃
        • 低频存储包
        • 回源流量包
        • 标准存储包
        • 外网下行流量包
        • 冷存储包
        • 归档存储包
      • 资源包计费方式
        • 资源包概览
        • 资源包抵扣规则
      • 按需价格清单
        • 数据处理价格
        • 存储价格
        • 流量价格
        • 请求价格
  • 数据湖存储
    • BOS HDFS 工具
      • 配置和使用
      • 常见问题
      • 概述
    • 数据迁移和流转
      • 使用 DistCp 迁移数据至分层命名空间 Bucket
      • DataX 读写 BOS
    • 分层命名空间
      • 服务介绍
      • 功能支持说明
      • 使用方式
      • 普通存储桶转换为分层命名空间存储桶
    • 大数据组件使用指南
      • Kafka数据存储到BOS
      • Spark 使用指南
      • Elasticsearch快照数据存储到BOS
      • Logstash数据存储到BOS
      • Hbase使用BOS作为底层存储
      • Flink 使用指南
      • Impala 使用指南
      • Hive 使用指南
      • Flume 数据存储到 BOS
      • Druid使用BOS作为Deep storage
      • Presto 使用指南
      • Fluentd收集数据存储到BOS
所有文档
menu
没有找到结果,请重新输入

对象存储 BOS

  • 产品公告
  • 功能发布记录
  • 产品描述
    • 使用限制
    • 产品优势
    • 应用场景
    • 产品功能
    • 产品简介
    • 核心概念
    • 分级存储介绍
      • 为什么会有分级存储
      • 存储类型介绍
  • S3
    • 兼容签名认证
    • 兼容接口
    • 兼容公共头
    • 兼容工具
    • 服务域名
    • 概述
  • 控制台操作指南
    • 查看并导出用量数据
    • 图片审核服务
    • 在线数据导入
    • 事件通知及数据处理
    • 操作准备
    • 配置BOS多用户访问控制
    • 联动百度网盘分享
    • 文件自动解压
    • 图片服务
    • 智能业务分析
    • 收藏路径
    • 分层命名空间存储桶操作说明
    • 额度管理
    • 统计与监控
    • 管理Bucket
      • 数据访问趋势分析
      • 设置跨域访问
      • Bucket概览
      • 请求者付费
      • 设置日志查询
      • 创建Bucket
      • Bucket额度管理
      • 删除Bucket
      • 管理Bucket标签
      • 设置回收站
      • 设置静态网站托管
      • 设置访问日志
      • 设置存储空间清单
      • 设置数据同步
      • 设置Referer白名单
      • 设置合规保留
      • 设置版本控制
      • 设置镜像回源
      • 设置服务端加密
      • 查询Bucket
      • 管理生命周期
        • 配置智能分层
        • 配置基础生命周期管理
        • 概述
        • 基础生命周期管理使用说明
          • 基于最后一次修改时间的生命周期规则
          • 基于最后一次访问时间的生命周期规则
      • 设置Bucket读写权限
        • 权限介绍
        • 设置Bucket读写权限
    • 管理Object
      • 设置文件权限
      • 文件夹分享
      • Select扫描
      • 分享文件-获取文件url
      • 对象标签
      • 设置Meta信息
      • 管理文件夹
      • 批量删除文件夹
      • 上传文件
      • 碎片管理
      • 下载文件
      • 转换文件存储类型
      • 重命名文件
      • 复制和移动文件
      • 删除文件
      • 文件夹统计
      • 取回归档文件
      • 查询Object
      • 批量管理Object
      • 设置软链接
    • 全局设置
      • VPC访问控制
    • 数据发布
      • 配置CDN上行加速
      • 创建Bucket自定义域名
      • 数据发布简介
      • 查看Bucket官方域名
      • 开通CDN官方加速域名
      • 配置缓存管理
      • 全球加速
  • 相关协议
    • 百度智能云对象存储联动百度网盘使用协议
  • 开发者指南
    • 基本概念
    • Region与Endpoint
    • 图像审核
    • 静态网站托管
    • 开发准备
    • 单链接限速
    • 监控服务操作
    • 事件通知
    • 数据容灾
      • 数据同步
      • 多AZ存储
    • 数据安全
      • 最小权限原则
      • 设置回收站
      • 设置防盗链
      • 设置服务端加密
      • 版本控制
        • 版本控制概述
        • 删除标记
      • 权限控制
        • IAM主子用户访问控制
        • Object权限控制
        • Bucket权限控制
    • 数据湖接入
      • 分层命名空间
      • 元数据转换服务
    • Bucket基本操作
      • 查看Bucket列表
      • 获取Bucket地域信息
      • 创建Bucket
      • 删除Bucket
      • 设置跨域资源共享
      • 设置访问日志
      • 数据发布
      • 管理生命周期
      • 设置Bucket标签
    • 数据生命周期管理
      • 智能业务分析
    • 数据发布
      • CDN加速发布
      • 绑定自定义域名
    • 数据迁移上云
      • 本地数据上云
      • 从其他云迁移
      • 场景概述
    • Object基本操作
      • 下载数据
        • 简单下载
        • 断点续传下载
      • 管理文件
        • 查看文件列表
        • Select扫描
        • 对象标签
        • 拷贝数据
        • 获取数据元信息
        • 删除数据
      • 上传数据
        • 上传回调
        • 追加上传
        • 表单上传
        • 分块及断点续传
        • 简单上传
  • 管理Bucket
    • Bucket概览
    • 请求者付费
    • 创建Bucket
    • Bucket额度管理
    • 删除Bucket
    • 管理Bucket标签
    • 设置回收站
    • 设置静态网站托管
    • 设置访问日志
    • 设置存储空间清单
    • 设置数据同步
    • 设置Referer白名单
    • 设置合规保留
    • 设置镜像回源
    • 设置服务端加密
    • .Archive
      • 设置跨域访问
      • Bucket概览
      • 请求者付费
      • 创建Bucket
      • Bucket额度管理
      • 删除Bucket
      • 管理Bucket标签
      • 设置回收站
      • 设置静态网站托管
      • 设置访问日志
      • 设置存储空间清单
      • 设置数据同步
      • 设置Referer白名单
      • 设置合规保留
      • 设置镜像回源
      • 设置服务端加密
      • 查询Bucket
    • 设置Bucket读写权限
      • 权限介绍
      • 设置Bucket读写权限
      • .Archive
        • 权限介绍
        • 设置Bucket读写权限
  • 数据处理
    • 图像处理名词解释
    • 视频即时转码
    • 获取视频元信息
    • 数据处理介绍
    • 视频截帧
    • 图像审核
    • 数据处理常见问题
    • 文档预览
    • 音视频处理
    • 智能识别
      • 概述
    • 图像通用设置
      • 原图保护
    • 图像处理指南V1.0
      • 质量变换
      • 格式转换
      • 获取图片信息
      • 使用规则
      • 水印
      • 图像缩略
      • 图像旋转
      • 渐近显示
      • 图像裁剪
    • 图像处理指南V2.0
      • 图像缩放
      • 质量变换
      • 格式转换
      • 图片模糊
      • 获取图片信息
      • 去除元信息
      • 图象缩放
      • 使用规则
      • 图片对比度
      • 图片亮度
      • 渐近显示
      • 图片锐化
      • 灰度变换
      • 智能处理
        • 智能处理使用规则
        • 智能效果
          • 智能去雾
          • 智能清晰度
          • 智能对比度
          • 智能调色
        • 智能场景
          • 拉伸恢复
          • 黑白上色
          • 物体擦除
          • 人像动漫化
          • 天空分隔
          • 风格转换
          • 无损放大
      • 图像水印
        • 添加图文混合水印
        • 添加图片水印
        • 添加文字水印
      • 图像旋转
        • 自适应旋转
        • 普通旋转
      • 图像裁剪
        • 索引裁剪
        • 内切圆裁剪
        • 圆角矩形裁剪
        • 普通裁剪
  • 内容审核
    • 图像审核
    • 视频审核
  • 周边工具
    • BOS-FTP工具
    • fsspec-bosfs
    • 周边工具概述
    • BOS-AlluxioExtension工具
    • 下载专区
    • BOS-PC客户端
      • 安装及登录
      • 使用指南
      • 常见问题
    • Docker
      • 概述
    • BOS-CLI命令行工具(旧版本)
      • 通过CLI使用BOS服务
      • 安装BOSCLI
      • 配置BOSCLI
      • 版本变更记录
      • 概述
    • BOS-HDFS工具
      • 配置和使用
      • 概述
      • 大数据组件使用指南
        • Presto使用指南
        • Hive使用指南
        • Flink使用指南
        • Impala使用指南
        • Spark使用指南
        • Flume数据存储到BOS
        • DataX读写BOS
    • BOS-CMD命令行工具
      • BOSCMD版本变更记录
      • 常见问题
      • 通过CMD使用BOS服务
      • 配置BOSCMD
      • 配置BCECMD命令行补全功能
      • BOS CMD常见问题
      • 安装BOSCMD
      • 概述
    • 第三方工具
      • rclone
      • S3 Browser
      • MinIO
      • 其他工具
      • Goofys
    • BOS-API生成工具
      • 概述
      • 图像审核服务接口
        • 图像审核接口
      • Bucket数据同步相关接口
        • 列举Bucket的所有replication同步规则
        • 设置Bucket数据同步
        • 获取Bucket数据同步信息
        • 获取Bucket指定id数据同步的进程状态
        • 删除Bucket的指定id的同步复制配置
      • 如何调用API
        • 鉴权认证
        • 构造请求
        • 返回响应
      • Service相关接口
        • 列举存储桶
        • 额度管理
          • 删除用户的额度设置
          • 设置用户的额度
          • 获取用户的额度信息
      • Object相关接口
        • 软链接
          • 创建软链接
          • 获取软链接
        • 基础操作
          • 获取对象的meta信息
          • 抓取Object并存储到Bucket中
          • 删除多个Object
          • 删除Object
          • 获取对象
          • 取回归档文件
        • 权限控制
          • 设置Object的访问权限
          • 获取Object的访问权限
          • 删除Object的访问权限
        • Select扫描
          • 向Object执行Sql语句
      • Bucket相关接口
        • 静态网站
          • 删除bucket的静态网站托管信息
          • 设置静态网站托管
          • 获取bucket的静态网站托管信息
        • 数据加密
          • 关闭bucket的服务端加密功能
          • 开启bucket的加密开关
          • 判断bucket的加密是否打开
        • 日志管理
          • 获取Bucket的访问日志配置
          • 开启Bucket的访问日志
          • 关闭Bucket的访问日志配置
        • 跨域访问
          • 获取指定Bucket上设定一个跨域资源共享规则
          • 在指定Bucket上设定一个跨域资源共享规则
          • 关闭指定Bucket上设定一个跨域资源共享规则
        • 基础操作
          • 获取bucket所在的区域
          • 创建存储桶
          • 删除存储桶
          • 查看Bucket是否存在和请求者是否有权限访问这个Bucket
          • 列举存储桶下的Object
          • 获取Bucket的默认存储类型
          • 列举存储桶
          • 跨域查询
          • 设置Bucket的默认存储类型
        • 事件通知
          • 推送ImageOcr和ImageClassify消息
          • 删除Bucket的通知规则
          • 获取Bucket的通知规则
          • 推送事件消息
          • 设置Bucket通知规则
        • 权限控制
          • 获取Bucket的访问权限
          • 设置Bucket的访问权限
        • 原图保护
          • 获取Bucket的原图保护配置情况
          • 开启Bucket的原图保护功能
          • 关闭Bucket的原图保护配置情况
        • 回收站
          • 开通Bucket回收站功能
          • 获取Bucket回收站的开通状态
          • 关闭Bucket回收站功能
        • 生命周期
          • 设置Bucket的生命周期
          • 获取Bucket的生命周期管理规则
          • 删除Bucket的生命周期管理规则
        • 合规保留
          • 锁定Bucket合规保留策略
          • 初始化合规保留策略
          • 删除合规保留策略
          • 获取Bucket合规保留策略
          • 延迟Bucket的合规保留策略保护周期
    • BOS-Probe错误检测工具
      • 通过BOSProbe检查上传下载
      • 安装BOSProbe
      • 建议及报告查看
      • 概述
    • BOS-FS挂载工具
      • 配置
      • 版本变更记录
      • 常见问题
      • 操作与实践
      • 安装
      • 概述
    • BOS Connector for PyTorch
      • 构建 Dataset
      • 读写 Checkpoint
      • 配置 BOS Connector for Pytorch
      • 功能及使用说明
      • 安装 BOS Connector for Pytorch
      • 性能测试
      • 概述
    • BOS-Util批量操作工具
      • 通过BOS-Util使用BOS服务
      • 版本变更记录
      • 安装BOS-Util
      • 概述
    • BOS-Import数据上云工具
      • 版本记录
      • 配置文件
      • 异常处理
      • 部署方式
      • 日志
      • 任务进度恢复
      • 概述
    • 月光宝盒物理迁移设备
      • 月光宝盒介绍
      • 月光宝盒操作流程
  • 安全与合规
    • 监控审计
    • 数据保护
    • 数据容灾
    • 访问控制
    • 数据保留合规
    • 数据加密
    • 概述
  • 快速入门
    • 开始使用BOS
    • 获取Object
    • 上传Object
    • 创建Bucket
    • 快速入门流程
    • 删除Object
    • 删除Bucket
  • 典型实践
    • 如何解决浏览器跨域CORS问题
    • CDN动态加速上传数据到BOS
    • 混合云中使用专线-VPN访问BOS
    • 通过安卓SDK使用HTTPDNS服务
    • 基于BOS的Presto实践
    • 将 BOS 作为 Jfrog Artifactory 的后端存储服务
    • 防盗链
    • BOS专线回源IDC最佳实践
    • AWS-lambda同步S3数据到BOS
    • 客户端加密实践
    • 基于BOS的Impala实践
    • 使用CDN加速BOS
    • HTTPS传输加密实践
    • 手机美图APP实践
      • 代码示例
      • 方案实践——搭建美图APP
      • 方案实践——使用美图APP
      • 概述及场景介绍
    • Python API请求访问BOS
      • PUT请求上传文件到Bucket
      • 基础(必看):鉴权字符串生成
      • GET请求下载Bucket文件到本地
    • Web数据直传至BOS
      • 基础篇:在浏览器中直接上传文件到BOS
      • 原理篇三:STS临时认证
      • 原理篇二:大文件分块上传
      • 原理篇一:在浏览器中直接上传文件到BOS
      • 进阶篇二:通过PostObject接口处理IE低版本
      • 进阶篇一:STS临时认证
    • 数据迁移
      • 场景简介
      • 三方云数据迁移到BOS
      • 本地数据迁移到BOS
  • SDK
    • SDK概览
    • Harmony-SDK
      • 异常处理
      • 日志
      • 版本变更记录
      • 初始化
      • 安装SDK工具包
      • 概述
      • Object管理
        • Object的分块上传
        • 获取Object
        • 上传Object
        • 删除Object
        • Object权限控制
        • 拷贝Object
        • 查看Bucket中的Object
      • Bucket管理
        • 查看Bucket列表
        • 新建Bucket
        • Bucket存储类型设置与查询
        • 判断Bucket是否存在
        • 删除Bucket
        • 查看Bucket所属的区域
        • Bucket权限控制
    • Ruby-SDK
      • 异常处理
      • 版本变更记录
      • sdk日志
      • 初始化
      • 安装SDK工具包
      • 概述
      • 文件管理
        • 查看文件是否存在
        • 列举存储空间中的文件
        • 上传文件
        • 获取及更新文件元信息
        • Object权限控制
        • 下载文件
        • 变更文件存储等级
        • 拷贝Object
        • 获取文件下载URL
        • 删除文件
      • Bucket管理
        • 新建Bucket
        • 判断Bucket是否存在
        • 删除Bucket
        • 查看Bucket所属的区域
        • Bucket权限管理
        • 列举Bucket
        • 概述
    • Python-SDK
      • 异常处理
      • 版本变更记录
      • 常见问题
      • 日志控制
      • 初始化
      • 安装SDK工具包
      • 概述
      • 文件管理
        • 查看文件是否存在
        • 列举存储空间中的文件
        • 上传文件
        • 获取及更新文件元信息
        • 取回归档存储类型文件
        • Object权限控制
        • 下载文件
        • 选取文件
        • 变更文件存储等级
        • 拷贝Object
        • 获取文件下载URL
        • 软链接
        • 删除文件
      • Bucket管理
        • Bucket跨域资源访问
        • 新建Bucket
        • 用户额度管理
        • 镜像回源
        • 数据同步
        • 判断Bucket是否存在
        • 获取回收站开通信息
        • 删除Bucket
        • 原图保护
        • 查看Bucket所属的区域
        • 设置Bucket存储类型
        • 关闭回收站
        • Bucket回收站
        • 日志管理
        • bucket清单管理
        • Bucket权限管理
        • 列举Bucket
        • Bucket生命周期管理
        • 事件通知
        • 概述
    • JavaScript-SDK
      • 安装SDK
      • 版本变更记录
      • 初始化
      • Bucket管理
      • 额度管理
      • 概述
      • Object管理
        • Object的分块上传
        • 获取Object
        • 上传Object
        • 删除Object
        • 获取文件URL
        • 拷贝Object
        • 查看Bucket中的Object
      • Bucket管理
        • 查看Bucket列表
        • 新建Bucket
        • Bucket日志管理
        • 判断Bucket是否存在
        • 删除Bucket
        • 查看Bucket所属的区域
        • 设置Bucket存储类型
        • 数据同步配置
        • Bucket权限管理
        • Bucket生命周期管理
        • 概述
    • Android-SDK
      • 异常处理
      • 日志
      • Object管理
      • 版本变更记录
      • 初始化
      • Bucket管理
      • 安装SDK工具包
      • 概述
      • 文件管理
        • Object的分块上传
        • 获取Object
        • 上传Object
        • 删除Object
        • Object权限控制
        • 拷贝Object
        • 查看Bucket中的Object
      • Bucket管理
        • 查看Bucket列表
        • 新建Bucket
        • 判断Bucket是否存在
        • 删除Bucket
        • Bucket权限控制
    • Java-SDK
      • 数据处理及使用
      • 异常处理
      • 版本变更记录
      • 常见问题
      • sdk日志
      • 初始化
      • Bucket管理
      • 安装SDK工具包
      • 文件管理
      • 概述
      • 文件管理
        • 拷贝文件
        • 查看文件是否存在
        • 对象标签
        • 列举存储空间中的文件
        • 上传文件
        • 获取及更新文件元信息
        • 取回归档存储类型文件
        • Object权限控制
        • 下载文件
        • 选取文件
        • 变更文件存储等级
        • 获取文件下载URL
        • 获取目录容量概览
        • 删除文件
      • Bucket管理
        • 新建Bucket
        • Bucket静态网站托管
        • 镜像回源
        • 标签管理
        • 判断Bucket是否存在
        • 删除Bucket
        • 原图保护
        • 查看Bucket所属的区域
        • 设置Bucket存储类型
        • Bucket数据同步
        • 设置Bucket服务端加密
        • Bucket权限管理
        • 回收站
        • 列举Bucket
        • 概述
    • IOS-SDK
      • 异常处理
      • 日志
      • Object管理
      • 版本变更记录
      • 初始化
      • Bucket管理
      • 安装SDK工具包
      • 概述
      • 文件管理
        • Object的分块上传
        • 获取Object
        • 上传Object
        • 删除Object
        • 拷贝Object
        • 查看Bucket中的Object
      • Bucket管理
        • 查看Bucket列表
        • 新建Bukcet
        • 删除Bucket
        • Bucket权限控制
        • 判断Bucket是否存在,以及是否有权限访问
    • GO-SDK
      • 数据处理及使用
      • 版本变更记录
      • 请求管理
      • sdk日志
      • 初始化
      • Bucket管理
      • 错误处理
      • 安装SDK工具包
      • 文件管理
      • 概述
    • C-Dotnet-SDK
      • 异常处理
      • Object管理
      • 版本变更记录
      • 初始化
      • Bucket管理
      • 安装SDK工具包
      • 概述
    • PHP-SDK
      • 异常处理
      • 版本变更记录
      • 初始化
      • Bucket管理
      • 安装SDK工具包
      • 文件管理
      • 概述
    • C-SDK
      • 异常处理
      • 版本变更记录
      • 初始化
      • 安装sdk工具包
      • 概述
      • 文件管理
        • 拷贝文件
        • 查看文件是否存在
        • 获取文件下载链接
        • 列举存储空间中的文件
        • 上传文件
        • 获取及更新元数据信息
        • Object权限控制
        • 下载文件
        • 变更文件存储等级
        • 归档存储
        • 删除文件
      • Bucket管理
        • 新建bucket
        • 删除bucket
        • 判断bucket 是否存在
        • 列举bucket
        • 概述
    • C++-SDK
      • 异常处理
      • 版本变更记录
      • sdk日志
      • 初始化
      • 安装SDK工具包
      • 概述
      • 文件管理
        • 拷贝文件
        • 查看文件是否存在
        • Object标签管理
        • 列举存储空间中的文件
        • 上传文件
        • 获取及更新文件元信息
        • Object权限控制
        • 下载文件
        • 变更文件存储等级
        • 获取文件下载URL
        • 归档存储
        • 删除文件
      • 请求管理
        • 中断取消请求
      • Bucket管理
        • 新建Bucket
        • 判断Bucket是否存在
        • 删除Bucket
        • 查看Bucket所属的区域
        • Bucket权限管理
        • 列举Bucket
        • 概述
  • 服务等级协议SLA
    • BOS服务等级协议SLA(V3.0)
    • 百度智能云对象存储可信云认证
  • API参考
    • 音视频处理接口
    • 访问控制
    • 简介
    • 接口规范
    • 上传回调
    • 错误码
    • 图像审核服务接口
      • 水印二维码识别(watermark)
      • 公众人物识别(public)
      • 暴恐识别(terror)
      • 恶心图识别(disgust)
      • 色情识别(antiporn)
      • 政治人物识别(politician)
      • 图像质量识别(quality)
      • 人脸探测(face)
      • 接口描述
      • 通用文字识别(ocr)
    • 分片上传相关接口
      • AbortMultipartUpload
      • ListMultipartUploads
      • ListParts
      • 使用指南
      • UploadPart
      • InitiateMultipartUpload
      • UploadPartCopy
      • CompleteMultipartUpload
    • Service相关接口
      • ListBuckets
      • 额度管理
        • DeleteUserQuota
        • PutUserQuota
        • GetUserQuota
    • Object相关接口
      • 软链接
        • GetSymlink
        • PutSymlink
      • 基础操作
        • CopyObject
        • ListObjects
        • FetchObject
        • GetObjectMeta
        • PostObject
        • listObjectVersions
        • DeleteObject
        • PutObject
        • AppendObject
        • DeleteMultipleObjects
        • RestoreObject
        • GetObject
        • OPTIONSObject
      • 权限控制
        • GetObjectAcl
        • PutObjectAcl
        • DeleteObjectAcl
      • Select扫描
        • SelectObject
      • 对象标签
        • PutObjectTagging
        • GetObjectTagging
        • DeleteObjectTagging
    • Bucket相关接口
      • 镜像回源
        • PutBucketMirroring
        • DeleteBuketMirroring
        • GetBucketMirroring
      • 静态网站
        • PutBucketStaticWebsite
        • DeleteBucketStaticWebsite
        • GetBucketStaticWebsite
      • 数据加密
        • GetBucketEncryption
        • DeleteBucketEncryption
        • PutBucketEncryption
      • 数据同步
        • GetBucketReplicationProgress
        • ListBucketReplication
        • GetBucketReplication
        • PutBucketReplication
        • DeleteBucketReplication
      • 日志管理
        • DeleteBucketLogging
        • GetBucketLogging
        • PutBucketLogging
      • 请求者付费
        • GetBucketRequestPayment
        • PutBucketRequestPayment
      • 跨域访问
        • GetBucketCors
        • PutBucketCors
        • DeleteBucketCors
      • 版本控制
        • PutBucketVersioning
        • GetBucketVersioning
      • 基础操作
        • GetBucketLocation
        • HeadBucket
        • PutBucketStorageclass
        • PutBucket
        • GetBucketStorageClass
        • DeleteBucket
      • 事件通知
        • PostResult
        • DeleteNotification
        • PostEvent
        • GetNotification
        • PutNotification
      • 权限控制
        • PutBucketAcl
        • GetBucketAcl
      • 额度管理
        • PutBucketQuota
        • GetBucketQuota
        • DeleteBucketQuota
      • 原图保护
        • PutBucketCopyrightProtection
        • GetCopyrightProtection
        • DeleteCopyrightProtection
      • 标签管理
        • PutBucketTagging
        • DeleteBucketTagging
        • GetBucketTagging
      • 回收站
        • DeleteBucketTrash
        • GetBucketTrash
        • PutBucketTrash
      • 存储桶清单
        • GetBucketInventory
        • ListBucketInventory
        • DeleteBucketInventory
        • PutBucketInventory
      • 生命周期
        • DeleteBucketLifecycle
        • GetBucketLifecycle
        • PutBucketLifecycle
      • 合规保留
        • ExtendBucketObjectLock
        • DeleteBucketObjectLock
        • CompleteBucketObjectLock
        • InitBucketObjectLock
        • GetBucketObjectLock
  • 常见问题
    • 数据迁移与备份
    • 认证及权限管理
    • 计费类问题
    • API&SDK&工具
    • Bucket访问及管理
    • 图片服务
    • 分析与统计
    • 一般类问题
    • 常见问题总览
    • 性能类问题
    • 安全类问题
    • 存储桶域名请求风格
    • Object上传下载及管理
  • 数据魔方
    • 批量处理
    • zip打包压缩
    • 智能数据处理
      • 图像处理
        • 图像处理介绍
        • 图像处理名词解释
        • 图像处理常见问题
        • 图像通用设置
          • 原图保护
        • 图像处理指南V1.0
          • 质量变换
          • 格式转换
          • 获取图片信息
          • 使用规则
          • 水印
          • 图像缩略
          • 图像旋转
          • 渐近显示
          • 图像裁剪
        • 图像处理指南V2.0
          • 图像缩放
          • 质量变换
          • 格式转换
          • 图片模糊
          • 获取图片信息
          • 去除元信息
          • 使用规则
          • 图片对比度
          • 图片亮度
          • 图片异常检测
          • 图片处理持久化
          • 渐近显示
          • 图像盲水印
          • 图片压缩
          • 失败返回原图
          • 图片锐化
          • 灰度变换
          • 智能处理
            • 智能处理使用规则
            • 智能效果
              • 智能去雾
              • 智能清晰度
              • 智能对比度
              • 智能调色
            • 智能场景
              • 拉伸恢复
              • 黑白上色
              • 物体擦除
              • 人像动漫化
              • 天空分隔
              • 风格转换
              • 无损放大
          • 图像水印
            • 添加图文混合水印
            • 添加图片水印
            • 添加文字水印
          • 图像旋转
            • 自适应旋转
            • 普通旋转
          • 图像裁剪
            • 索引裁剪
            • 内切圆裁剪
            • 圆角矩形裁剪
            • 普通裁剪
      • 文档处理
        • 文档预览
      • 视频处理
        • 视频即时转码
        • 获取视频元信息
        • 视频截帧
        • 音视频处理
        • M3U8签名
  • 视频专区
    • BOS分级存储
    • 通过域名访问BOS资源
    • 了解BOS
    • Object上传
  • 产品定价
    • 余额不足和欠费提醒
    • 查看消费明细
    • 计费案例
    • 计费常见问题
    • 计费项介绍
      • 流量费用
      • 计费项概览
      • 存储费用
      • 数据处理费用
      • 请求费用
    • 产品价格
      • 资源包价格清单
      • 按需计费方式
      • 资源包价格清单-废弃
        • 低频存储包
        • 回源流量包
        • 标准存储包
        • 外网下行流量包
        • 冷存储包
        • 归档存储包
      • 资源包计费方式
        • 资源包概览
        • 资源包抵扣规则
      • 按需价格清单
        • 数据处理价格
        • 存储价格
        • 流量价格
        • 请求价格
  • 数据湖存储
    • BOS HDFS 工具
      • 配置和使用
      • 常见问题
      • 概述
    • 数据迁移和流转
      • 使用 DistCp 迁移数据至分层命名空间 Bucket
      • DataX 读写 BOS
    • 分层命名空间
      • 服务介绍
      • 功能支持说明
      • 使用方式
      • 普通存储桶转换为分层命名空间存储桶
    • 大数据组件使用指南
      • Kafka数据存储到BOS
      • Spark 使用指南
      • Elasticsearch快照数据存储到BOS
      • Logstash数据存储到BOS
      • Hbase使用BOS作为底层存储
      • Flink 使用指南
      • Impala 使用指南
      • Hive 使用指南
      • Flume 数据存储到 BOS
      • Druid使用BOS作为Deep storage
      • Presto 使用指南
      • Fluentd收集数据存储到BOS
  • 文档中心
  • arrow
  • 对象存储BOS
  • arrow
  • SDK
  • arrow
  • Android-SDK
  • arrow
  • Object管理
本页目录
  • 上传Object
  • 最简单的上传
  • 设定Object的Copy属性
  • 设定Object的Http Header
  • 用户自定义元数据
  • Append方式上传Object
  • 获取上传进度
  • 取消接口
  • 同步回调
  • 查看Bucket中的Object
  • 简单查询
  • 扩展查询
  • 查询模拟文件夹
  • 获取Object
  • 简单的获取Object
  • 通过GetObjectRequest获取Object
  • 获取下载进度
  • 下载Object到指定路径
  • 获取Object的storageClass
  • 只获取ObjectMetadata
  • 获取Object的URL
  • Object权限控制
  • 设置Object的访问权限
  • 查看Object的权限
  • 删除Object的权限
  • 删除Object
  • 拷贝Object
  • Object的分块上传
  • 分块上传的场景
  • Multipart Upload分块上传流程
  • 初始化Multipart Upload
  • 上传分块
  • 完成分块上传
  • 取消分块上传
  • 获取未完成的分块上传
  • 获取所有已上传的分块信息
  • 封装分块上传

Object管理

更新时间:2025-08-21

上传Object

最简单的上传

  • 基本流程

    1. 创建BOSClient 类的实例。
    2. 调用BOSClient.putObject()方法,可以通过如下四种方式上传Object:文件、数据流、二进制串和字符串的形式。
    3. 对返回的PutObjectResponse类型实例,执行getETag()获得上传成功的ETag。
  • 示例代码

    Java
    1// 获取指定文件
    2File file = new File(<FilePath>);     //指定文件路径
    3
    4// 以文件形式上传Object
    5PutObjectResponse putObjectFromFileResponse = 
    6    client.putObject(<BucketName>, <ObjectKey>, file);
    7
    8// 获取数据流
    9InputStream inputStream = new FileInputStream(<FilePath>);
    10
    11// 以数据流形式上传Object
    12PutObjectResponse putObjectResponseFromInputStream = 
    13    client.putObject(<BucketName>, <ObjectKey>, inputStream);
    14
    15// 以二进制串上传Object
    16PutObjectResponse putObjectResponseFromByte = 
    17    client.putObject(<BucketName>, <ObjectKey>, <byte>);
    18
    19// 以字符串上传Object
    20PutObjectResponse putObjectResponseFromString = 
    21    client.putObject(<BucketName>, <ObjectKey>, <string>);
    22
    23// 打印ETag
    24System.out.println(putObjectFromFileResponse.getETag());

    说明:Object以文件的形式上传到BOS中,putObject函数支持不超过5GB的Object上传。在putObject请求处理成功后,BOS会在Header中返回Object的ETag作为文件标识。

  • 完整示例

    Java
    1import java.io.File;
    2import java.io.FileInputStream;
    3import java.io.FileNotFoundException;
    4import java.io.InputStream;
    5import android.app.Activity;
    6import android.os.Bundle;
    7import com.baidubce.BceClientException;
    8import com.baidubce.BceServiceException;
    9import com.baidubce.auth.DefaultBceCredentials;
    10import com.baidubce.development.R;
    11import com.baidubce.services.bos.BosClient;
    12import com.baidubce.services.bos.BosClientConfiguration;
    13import com.baidubce.services.bos.model.PutObjectResponse;
    14​    
    15public class ExampleActivity extends Activity {
    16
    17  private String bucketName = <BucketName>;
    18  private String objectKey = <ObjectKey>;
    19  byte[] b = null;
    20  String str = <PutString>;
    21
    22  @Override
    23  protected void onCreate(Bundle savedInstanceState) {
    24    super.onCreate(savedInstanceState);
    25    setContentView(R.layout.activity_main);
    26    new Thread(new Runnable() {
    27        @Override
    28        public void run() {
    29            try {
    30                BosClientConfiguration config = new BosClientConfiguration();
    31                config.setCredentials(new DefaultBceCredentials(<AccessKeyID>, <SecretAccessKey>));
    32                config.setEndpoint(<EndPoint>);
    33                BosClient client = new BosClient(config);
    34
    35                // 获取指定文件
    36                File file = new File("/path/to/file.zip");
    37
    38                // 以文件形式上传Object
    39                PutObjectResponse putObjectFromFileResponse = client.putObject(<BucketName>, <ObjectKey>, file);
    40
    41                // 获取数据流
    42                InputStream inputStream = new FileInputStream("/path/to/test.zip");
    43
    44                // 以数据流形式上传Object
    45                PutObjectResponse putObjectResponseFromInputStream = client.putObject(<BucketName>, <ObjectKey>, inputStream);
    46
    47                // 以二进制串上传Object
    48                PutObjectResponse putObjectResponseFromByte = client.putObject(<BucketName>, <ObjectKey>, b);
    49
    50                // 以字符串上传Object
    51                PutObjectResponse putObjectResponseFromString = client.putObject(<BucketName>, <ObjectKey>, str);
    52
    53                // 打印ETag
    54                System.out.println(putObjectFromFileResponse.getETag());
    55
    56            } catch (BceServiceException e) {
    57                System.out.println("Error ErrorCode: " + e.getErrorCode());
    58                System.out.println("Error RequestId: " + e.getRequestId());
    59                System.out.println("Error StatusCode: " + e.getStatusCode());
    60                System.out.println("Error Message: " + e.getMessage());
    61                System.out.println("Error ErrorType: " + e.getErrorType());
    62            } catch (BceClientException e) {
    63                System.out.println("Error Message: " + e.getMessage());
    64            } catch (FileNotFoundException e) {
    65                // TODO Auto-generated catch block
    66                e.printStackTrace();
    67            } 
    68        }
    69    }).start();
    70}}

设定Object的Copy属性

CopyObject接口用于将一个已经存在的Object拷贝到另外一个Object,拷贝过程中会对源Object的Etag或修改状态进行判断,根据判断结果决定是否执行拷贝。详细的参数解释如下:

名称 类型 描述 是否必需
x-bce-copy-source-if-match String 如果源Object的ETag值和用户提供的ETag相等,则执行拷贝操作,否则拷贝失败。 否
x-bce-copy-source-if-none-match String 如果源Object的ETag和用户提供的ETag不相等,则执行拷贝操作,否则拷贝失败。 否
x-bce-copy-source-if-unmodified-since String 如果源object在x-bce-copy-source-if-unmodified-since之后没被修改,则执行拷贝操作,否则拷贝失败。 否
x-bce-copy-source-if-modified-since String 如果源object在x-bce-copy-source-if-modified-since之后被修改了,则执行拷贝操作,否则拷贝失败。 否
  • 示例代码

    Java
    1// 初始化BosClient
    2BosClient client = ...;
    3
    4// 创建CopyObjectRequest对象
    5CopyObjectRequest copyObjectRequest = new CopyObjectRequest(srcBucketName, srcKey, destBucketName, destKey);
    6
    7// 设置新的Metadata
    8Map<String, String> userMetadata = new HashMap<String, String>();
    9userMetadata.put("<user-meta-key>","<user-meta-value>");
    10ObjectMetadata meta = new ObjectMetadata();
    11meta.setUserMetadata(userMetadata);
    12copyObjectRequest.setNewObjectMetadata(meta);
    13
    14//copy-source-if-match
    15copyObjectRequest.withETag("111111111183bf192b57a4afc76fa632");
    16//copy-source-if-none-match
    17copyObjectRequest.withNoMatchingETagConstraint("111111111183bf192b57a4afc76fa632");
    18
    19Date modifiedSinceConstraint = new Date();    
    20SimpleDateFormat df = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss z", Locale.UK);  
    21df.setTimeZone(new java.util.SimpleTimeZone(0, "GMT"));        
    22String date = df.format(modifiedSinceConstraint);
    23
    24//copy-source-if-modified-since
    25copyObjectRequest.withModifiedSinceConstraint(date);
    26
    27//copy-source-if-unmodified-since
    28copyObjectRequest.withUnmodifiedSinceConstraint(date);
    29
    30// 复制Object
    31CopyObjectResponse copyObjectResponse = client.copyObject(copyObjectRequest);

设定Object的Http Header

BOS支持您在上传object时设定Http Header。

  • 基本流程

    1. 创建ObjectMetadata类的实例。
    2. 执行setContentLength()/setContentType()等方法对Http Header进行设定。
    3. 将设定后的meta作为参数加入client.putObject()中。
  • 示例代码

    Java
    1// 创建ObjectMetadata类的实例
    2ObjectMetadata meta = new ObjectMetadata();
    3
    4// 设置ContentLength大小
    5meta.setContentLength(<Length>);
    6
    7// 设置ContentType
    8meta.setContentType("application/json");
    9
    10client.putObject(<BucketName>, <ObjectKey>, content, meta);

    说明:header可设置的属性有:"Cache-Control"、"Content-Encoding"、"Content-Disposition"、"Expires"

  • 完整示例

    Java
    1import java.io.FileInputStream;
    2import java.io.FileNotFoundException;
    3import java.io.InputStream;
    4import android.app.Activity;
    5import android.os.Bundle;
    6import com.baidubce.BceClientException;
    7import com.baidubce.BceServiceException;
    8import com.baidubce.auth.DefaultBceCredentials;
    9import com.baidubce.demo.R;
    10import com.baidubce.services.bos.BosClient;
    11import com.baidubce.services.bos.BosClientConfiguration;
    12import com.baidubce.services.bos.model.ObjectMetadata;
    13import com.baidubce.services.bos.model.PutObjectResponse;
    14
    15public class ExampleActivity extends Activity {
    16
    17private String bucketName = <BucketName>;
    18private String objectKey = <ObjectKey>;
    19
    20@Override
    21protected void onCreate(Bundle savedInstanceState) {
    22    super.onCreate(savedInstanceState);
    23    setContentView(R.layout.activity_main);
    24    new Thread(new Runnable() {
    25        @Override
    26        public void run() {
    27            try {
    28                BosClientConfiguration config = new BosClientConfiguration();
    29                config.setCredentials(new DefaultBceCredentials(<AccessKeyID>, <SecretAccessKey>));
    30                config.setEndpoint(<EndPoint>);
    31                BosClient client = new BosClient(config);
    32
    33                // 获取数据流
    34                InputStream inputStream = new FileInputStream("/path/to/test.zip");
    35
    36                // 创建ObjectMetadata类的实例
    37                ObjectMetadata meta = new ObjectMetadata();
    38
    39                // 设置ContentLength大小
    40                meta.setContentLength(1000);
    41
    42                // 设置ContentType
    43                meta.setContentType("application/json");
    44
    45                PutObjectResponse putObjectResponseFromInputStream = client.putObject(bucketName, objectKey, inputStream, meta);
    46
    47                 // 打印ETag
    48                System.out.println(putObjectResponseFromInputStream.getETag());
    49
    50            } catch (BceServiceException e) {
    51                System.out.println("Error ErrorCode: " + e.getErrorCode());
    52                System.out.println("Error RequestId: " + e.getRequestId());
    53                System.out.println("Error StatusCode: " + e.getStatusCode());
    54                System.out.println("Error Message: " + e.getMessage());
    55                System.out.println("Error ErrorType: " + e.getErrorType());
    56            } catch (BceClientException e) {
    57                System.out.println("Error Message: " + e.getMessage());
    58            } catch (FileNotFoundException e) {
    59                // TODO Auto-generated catch block
    60                e.printStackTrace();
    61            } 
    62        }
    63    }).start();
    64}}

用户自定义元数据

BOS支持用户自定义元数据来对Object进行描述。

  • 基本流程

    1. 创建ObjectMetadata类的实例。
    2. 执行addUserMetadata()方法对Http Header进行自定义元数据。
    3. 将设定后的meta作为参数加入client.putObject()中。
  • 示例代码

    Java
    1// 设置自定义元数据name的值为my-data
    2meta.addUserMetadata("name", "my-data");	  
    3
    4// 上传Object
    5client.putObject(<BucketName>, <ObjectKey>, <Content>, meta);

    说明:在上面代码中,用户自定义了一个名字为”name”,值为”my-data”的元数据。当用户下载此Object的时候,此元数据也可以一并得到。一个Object可以有多个类似的参数,但所有的User Meta总大小不能超过2KB。

  • 完整示例

    Java
    1import java.io.FileInputStream;
    2import java.io.FileNotFoundException;
    3import java.io.InputStream;
    4import android.app.Activity;
    5import android.os.Bundle;
    6import com.baidubce.BceClientException;
    7import com.baidubce.BceServiceException;
    8import com.baidubce.auth.DefaultBceCredentials;
    9import com.baidubce.demo.R;
    10import com.baidubce.services.bos.BosClient;
    11import com.baidubce.services.bos.BosClientConfiguration;
    12import com.baidubce.services.bos.model.ObjectMetadata;
    13import com.baidubce.services.bos.model.PutObjectResponse;
    14
    15public class ExampleActivity extends Activity {
    16
    17private String bucketName = <BucketName>;
    18private String objectKey = <ObjectKey>;
    19
    20@Override
    21protected void onCreate(Bundle savedInstanceState) {
    22    super.onCreate(savedInstanceState);
    23    setContentView(R.layout.activity_main);
    24    new Thread(new Runnable() {
    25        @Override
    26        public void run() {
    27            try {
    28                BosClientConfiguration config = new BosClientConfiguration();
    29                config.setCredentials(new DefaultBceCredentials(<AccessKeyID>, <SecretAccessKey>));
    30                config.setEndpoint(<EndPoint>);
    31                BosClient client = new BosClient(config);
    32
    33                // 获取数据流
    34                InputStream inputStream = new FileInputStream("/path/to/test.zip");
    35
    36                // 创建ObjectMetadata类的实例
    37                ObjectMetadata meta = new ObjectMetadata();
    38
    39                // 自定义元数据
    40                meta.addUserMetadata("name", "my-data");	    
    41
    42                PutObjectResponse putObjectResponseFromInputStream = client.putObject(<BucketName>, <ObjectKey>, inputStream, meta);
    43
    44                 // 打印ETag
    45                System.out.println(putObjectResponseFromInputStream.getETag());
    46
    47            } catch (BceServiceException e) {
    48                System.out.println("Error ErrorCode: " + e.getErrorCode());
    49                System.out.println("Error RequestId: " + e.getRequestId());
    50                System.out.println("Error StatusCode: " + e.getStatusCode());
    51                System.out.println("Error Message: " + e.getMessage());
    52                System.out.println("Error ErrorType: " + e.getErrorType());
    53            } catch (BceClientException e) {
    54                System.out.println("Error Message: " + e.getMessage());
    55            } catch (FileNotFoundException e) {
    56                // TODO Auto-generated catch block
    57                e.printStackTrace();
    58            } 
    59        }
    60    }).start();
    61}}

Append方式上传Object

BOS支持AppendObject,即以追加写的方式上传文件,适用场景如日志追加及直播等实时视频文件上传。通过AppendObject操作创建的Object类型为Appendable Object,可以对该Object追加数据;而通过PutObject上传的Object是Normal Object,不可进行数据追加写。AppendObject大小限制为0~5G。

  • 示例代码

    Java
    1public void AppendObject(BosClient client, String bucketName, String objectKey, byte[] byte1, String string1) {
    2      // 获取指定文件
    3      File file = new File("/path/to/file.zip");
    4      // 获取数据流
    5      InputStream inputStream = new FileInputStream("/path/to/test.zip");
    6
    7      // 以文件形式上传Object
    8      AppendObjectResponse appendObjectFromFileResponse = client.appendObject(bucketName, objectKey, file);
    9      // 以数据流形式上传Object
    10      AppendObjectResponse appendObjectResponseFromInputStream = client.appendObject(bucketName, objectKey, inputStream);
    11      // 以二进制串上传Object
    12      AppendObjectResponse appendObjectResponseFromByte = client.appendObject(bucketName, objectKey, byte1);
    13      // 以字符串上传Object
    14      AppendObjectResponse appendObjectResponseFromString = client.appendObject(bucketName, objectKey, string1);
    15
    16      // 向AppendFile追加内容
    17      Long nextOffset = appendObjectFromFileResponse.getNextAppendOffset();
    18      AppendObjectRequest request =new AppendObjectRequest(bucketName, objectKey,
    19      RestartableInputStream.wrap(string1.getBytes()));
    20      request.withOffset(nextOffset);
    21      AppendObjectResponse appendResponse = client.appendObject(request);      
    22}

    ​

获取上传进度

Android SDK支持在上传过程中实时提供上传进度信息。目前支持PutObject, AppendObject, UploadPart以及PutSuperObjectFromFile四个接口。进度上传接口的使用必须构造对应的Request (PutObjectRequest, AppendObjectRequest, UploadPartRequest以及PutSuperObjectRequest)。

SDK提供的上传进度回调接口如下,您可以在其中定义上传过程中您所需要的操作,如更新界面等等。

Java
1public interface BceProgressCallback<T extends AbstractBceRequest> {
2      // request为上传的请求
3      // currentSize为当前上传的大小(单位:byte)
4      // totalSize为本次请求需要上传的总大小(单位:byte)
5      void onProgress(T request, long currentSize, long totalSize);
6}
  • PutObject示例代码:

    Java
    1PutObjectRequest request = new PutObjectRequest(this.bucketName, "test", file);
    2ObjectMetadata objectMetadata = new ObjectMetadata();
    3objectMetadata.setContentType("text/plain");
    4request.setObjectMetadata(objectMetadata);
    5request.setProgressCallback(new BosProgressCallback<PutObjectRequest>() {
    6    @Override
    7    public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
    8        Log.e(currentSize + "", totalSize + "");
    9    }
    10});
    11String eTag = this.client.putObject(request).getETag();
  • AppendObject示例代码:

    Java
    1ObjectMetadata objectMetadata = new ObjectMetadata();
    2objectMetadata.setContentType("text/plain");
    3AppendObjectRequest request = new AppendObjectRequest(this.bucketName, "test", file);
    4request.setObjectMetadata(objectMetadata);
    5AppendObjectResponse response = this.client.appendObject(request);
    6Long nextOffset = response.getNextAppendOffset();
    7request.withOffset(nextOffset);
    8request.setProgressCallback(new BosProgressCallback<AppendObjectRequest>() {
    9    @Override
    10    public void onProgress(AppendObjectRequest request, long currentSize, long totalSize) {
    11        Log.e(currentSize + "", totalSize + "");
    12    }
    13});
    14response = this.client.appendObject(request);
  • UploadPart示例代码:

    Java
    1UploadPartRequest request = new UploadPartRequest().withBucketName(this.bucketName)
    2        .withKey("test").withUploadId(uploadId).withPartNumber(1).withPartSize(8000)
    3        .withInputStream(fis);
    4request.setProgressCallback(new BosProgressCallback<UploadPartRequest>() {
    5    @Override
    6    public void onProgress(UploadPartRequest request, long currentSize, long totalSize) {
    7        Log.e(currentSize + "", totalSize + "");
    8    }
    9});
    10UploadPartResponse response = this.client.uploadPart(request);
  • PutSuperObjectFromFile示例代码:

    Java
    1PutSuperObjectRequest request = new PutSuperObjectRequest().withBucketName(this.bucketName)
    2        .withKey("test").withPartSize(1024*1024*2L).withFile(file);
    3request.setProgressCallback(new BosProgressCallback<PutSuperObjectRequest>() {
    4    @Override
    5    public void onProgress(PutSuperObjectRequest request, long currentSize, long totalSize) {
    6        Log.e(currentSize + "", totalSize + "");
    7    }
    8});
    9PutSuperObjectResponse response = this.client.putSuperObjectFromFile(request);

    目前,SDK默认上传进度的回调粒度为2048个字节。您可以通过如下方法设置一个更适合您App应用的回调粒度:

    BosClientConfiguration config=new BosClientConfiguration(); config.setUploadSegmentPart(1024);

注意: 该值必须在1-8192之间,如不在该范围内,Android SDK会强制设置为2048.

取消接口

Android SDK支持在请求过程中取消本次请求,其中上传请求中剩余的数据将不再会上传至BOS,下载请求中取消操作会关闭连接,执行中的操作会抛出Request is canceled!异常

所有的BOS操作都可以使用取消接口,但是已经完成的请求无法被取消,已经完成的操作也不会抛出异常

Java
1// 以上传接口取消为例
2final PutObjectRequest req = new PutObjectRequest(<BucketName>, <ObjectName>,
3         new FileInputStream(<FilePath>));
4Runnable cancelTask = new Runnable() {
5    @Override
6    public void run() {
7        try {
8            Thread.sleep(100);
9        } catch (InterruptedException e) {
10            e.printStackTrace()
11        }
12        // 取消本次上传请求
13        req.cancel();
14    }
15};
16new Thread(cancelTask).start();
17client.putObject(req);

同步回调

Android SDK支持BOS服务端同步回调接口,通过在PutObjectRequest中,设置process参数,就可以在上传完成后,让BOS服务端主动调用回调接口来达到通知客户目的。

Java
1PutObjectRequest request = new PutObjectRequest({bucket}, {object}, {inputStream});
2// 设置x-bce-process参数
3request.setProcess({x-bce-process});
4PutObjectResponse response = client.putObject(request);
5// 获取返回的http status code
6int statusCode = response.getHttpResponse().getStatusCode();
7// 获取返回的回调接口返回的数据
8string callbackString = response.getServerCallbackReturnBody();

查看Bucket中的Object

简单查询

查看Bucket中Object列表。

  • 基本流程

    1. 创建BOSClient类的实例。
    2. 执行BOSClient.listObjects(bucketName)方法,会返回ListObjectsResponse类的实例。
    3. 对ListObjectsResponse类型可以进行getBuckets()/getOwner()/getMetadata()操作。
  • 示例代码

    Java
    1// 获取指定Bucket下的所有Object信息
    2ListObjectsResponse listing = client.listObjects(<BucketName>);
    3
    4// 遍历所有Object
    5for (BosObjectSummary objectSummary : listing.getContents()) {
    6    System.out.println("ObjectKey: " + objectSummary.getKey());
    7}

    说明: listObjects( )方法返回ListObjectsResponse对象,ListObjectsResponse对象包含了此次listObject请求的返回结果。用户可以通过ListObjectsResponse中的getContents方法获取所有Object的描述信息。

    • 默认情况下,如果Bucket中的Object数量大于1000,则只会返回1000个Object,并且返回结果中IsTruncated值为True,并返回NextMarker做为下次读取的起点。
    • 若想获取更多的Object,可以使用Marker参数分次读取,请参考扩展查询。
  • 完整示例

    Java
    1import android.app.Activity;
    2import android.os.Bundle;
    3import com.baidubce.BceClientException;
    4import com.baidubce.BceServiceException;
    5import com.baidubce.auth.DefaultBceCredentials;
    6import com.baidubce.demo.R;
    7import com.baidubce.services.bos.BosClient;
    8import com.baidubce.services.bos.BosClientConfiguration;
    9import com.baidubce.services.bos.model.BosObjectSummary;
    10import com.baidubce.services.bos.model.ListObjectsResponse;
    11
    12public class ExampleActivity extends Activity {
    13
    14private String bucketName = <BucketName>;
    15
    16@Override
    17protected void onCreate(Bundle savedInstanceState) {
    18    super.onCreate(savedInstanceState);
    19    setContentView(R.layout.activity_main);
    20    new Thread(new Runnable() {
    21        @Override
    22        public void run() {
    23            try {
    24                BosClientConfiguration config = new BosClientConfiguration();
    25                config.setCredentials(new DefaultBceCredentials(<AccessKeyId>, <SecretAccessKey>));
    26                config.setEndpoint(<EndPoint>);
    27                BosClient client = new BosClient(config);
    28
    29                // 获取指定Bucket下的所有Object信息
    30                ListObjectsResponse listing = client.listObjects(<BucketName>);
    31
    32                // 遍历所有Object
    33                for (BosObjectSummary objectSummary : listing.getContents()) {
    34                    System.out.println("ObjectKey: " + objectSummary.getKey());
    35                }               	                    
    36
    37            } catch (BceServiceException e) {
    38                System.out.println("Error ErrorCode: " + e.getErrorCode());
    39                System.out.println("Error RequestId: " + e.getRequestId());
    40                System.out.println("Error StatusCode: " + e.getStatusCode());
    41                System.out.println("Error Message: " + e.getMessage());
    42                System.out.println("Error ErrorType: " + e.getErrorType());
    43            } catch (BceClientException e) {
    44                System.out.println("Error Message: " + e.getMessage());
    45            }
    46        }
    47    }).start();
    48}}

扩展查询

用户可以通过设置ListObjectsRequest参数来完成更多扩展查询操作设置。ListObjectsRequest中可以设置的扩展参数如下:

参数名称 说明 默认值
MaxKeys 设定此次返回Object的最大个数,不可超过1000。 1000
Prefix 设定objectKey的前缀,前缀是指objectKey包含并以Prefix的值作为开始。
通常与Delimiter配合在查询模拟文件夹中使用。
-
Delimiter 是一个分隔符,用来对objectKey进行分层。
通常与Prefix配合在查询模拟文件夹中使用。
从Prefix开始到第一次出现Delimiter字符之间的objectKey称为:CommonPrefixes。
-
Marker 是一个字符串,用来设定返回结果的起始位置。
设定Marker值之后,返回的Object会从Marker值之后按字母排序开始返回。
-
  • 基本流程

    1. 创建ListObjectsRequest类的实例。
    2. 在ListObjectsRequest中执行setDelimiter/setMarker()/setPrefix()等方法,实现更多的扩展查询操作。
    3. 创建BOSClient类的实例,执行listObjects(listObjectsRequest)。
  • 示例代码

    Java
    1// 构造ListObjectsRequest请求
    2ListObjectsRequest listObjectsRequest = new ListObjectsRequest(<BucketName>);  
    3
    4// 设置扩展查询参数
    5listObjectsRequest.setDelimiter(<Delimiter>);
    6listObjectsRequest.setMarker(<Marker>);
    7...   
    8ListObjectsResponse listing = client.listObjects(listObjectsRequest);

    说明:上面代码中调用了 listObjects 中的一个重载方法,通过传入 ListObjectsRequest 来完成请求。

  • 完整示例

    示例一:

    Java
    1import android.app.Activity;
    2import android.os.Bundle;
    3import com.baidubce.BceClientException;
    4import com.baidubce.BceServiceException;
    5import com.baidubce.auth.DefaultBceCredentials;
    6import com.baidubce.demo.R;
    7import com.baidubce.services.bos.BosClient;
    8import com.baidubce.services.bos.BosClientConfiguration;
    9import com.baidubce.services.bos.model.BosObjectSummary;
    10import com.baidubce.services.bos.model.ListObjectsRequest;
    11import com.baidubce.services.bos.model.ListObjectsResponse;
    12
    13public class ExampleActivity extends Activity {
    14
    15private String bucketName = <BucketName>;
    16
    17@Override
    18protected void onCreate(Bundle savedInstanceState) {
    19    super.onCreate(savedInstanceState);
    20    setContentView(R.layout.activity_main);
    21    new Thread(new Runnable() {
    22        @Override
    23        public void run() {
    24            try {
    25                BosClientConfiguration config = new BosClientConfiguration();
    26                config.setCredentials(new DefaultBceCredentials(<AccessKeyID>, <SecretAccessKey>));
    27                config.setEndpoint(<EndPoint>);
    28                BosClient client = new BosClient(config);
    29
    30                // 构造ListObjectsRequest请求
    31                ListObjectsRequest listObjectsRequest = new ListObjectsRequest(<BucketName>); 
    32
    33                // 设置参数
    34                listObjectsRequest.setDelimiter("/");
    35                listObjectsRequest.setMarker("123");
    36                listObjectsRequest.setMaxKeys(100);
    37                listObjectsRequest.setPrefix("fun");
    38
    39                // 获取指定Bucket下符合上述条件的所有Object信息
    40                ListObjectsResponse listing = client.listObjects(listObjectsRequest);
    41
    42                // 遍历所有Object
    43                for (BosObjectSummary objectSummary : listing.getContents()) {
    44                    System.out.println("ObjectKey: " + objectSummary.getKey());
    45                }                	
    46
    47            } catch (BceServiceException e) {
    48                System.out.println("Error ErrorCode: " + e.getErrorCode());
    49                System.out.println("Error RequestId: " + e.getRequestId());
    50                System.out.println("Error StatusCode: " + e.getStatusCode());
    51                System.out.println("Error Message: " + e.getMessage());
    52                System.out.println("Error ErrorType: " + e.getErrorType());
    53            } catch (BceClientException e) {
    54                System.out.println("Error Message: " + e.getMessage());
    55            }
    56        }
    57    }).start();
    58}}

    示例二:使用Nextmarker完整示例。

    Java
    1import android.app.Activity;
    2import android.os.Bundle;
    3import com.baidubce.BceClientException;
    4import com.baidubce.BceServiceException;
    5import com.baidubce.auth.DefaultBceCredentials;
    6import com.baidubce.demo.R;
    7import com.baidubce.services.bos.BosClient;
    8import com.baidubce.services.bos.BosClientConfiguration;
    9import com.baidubce.services.bos.model.BosObjectSummary;
    10import com.baidubce.services.bos.model.ListObjectsRequest;
    11import com.baidubce.services.bos.model.ListObjectsResponse;
    12
    13public class ExampleActivity extends Activity {
    14
    15private String bucketName = <BucketName>;
    16
    17@Override
    18protected void onCreate(Bundle savedInstanceState) {
    19  super.onCreate(savedInstanceState);
    20  setContentView(R.layout.activity_main);
    21  new Thread(new Runnable() {
    22      @Override
    23      public void run() {
    24         try {
    25            BosClientConfiguration config = new BosClientConfiguration();
    26            config.setCredentials(new DefaultBceCredentials(<AccessKeyId>, <SecretAccessKey>);
    27            config.setEndpoint(<EndPoint>);
    28            BosClient client = new BosClient(config);
    29            ListObjectsRequest listObjectsRequest = new ListObjectsRequest(<BucketName>);
    30            listObjectsRequest.setMarker("");
    31            listObjectsRequest.setMaxKeys(20);
    32            listObjectsRequest.setDelimiter(BceConfig.BOS_DELIMITER);
    33            ListObjectsResponse listObjectsResponse = client.listObjects(listObjectsRequest);
    34            String nextMark = "";
    35            if(listObjectsResponse.isTruncated()){
    36               nextMark = listObjectsResponse.getNextMarker();
    37            }
    38
    39           ListObjectsRequest listObjectsRequest2 = new ListObjectsRequest(<BucketName>);
    40           listObjectsRequest2.setMarker(nextMark);
    41           listObjectsRequest2.setMaxKeys(20);
    42           listObjectsRequest2.setDelimiter(BceConfig.BOS_DELIMITER);
    43           ListObjectsResponse listing = client.listObjects(listObjectsRequest2);
    44
    45           for (BosObjectSummary objectSummary : listing.getContents()) {
    46               System.out.println("ObjectKey: " + objectSummary.getKey());
    47            }                
    48
    49          } catch (BceServiceException e) {
    50            System.out.println("Error ErrorCode: " + e.getErrorCode());
    51            System.out.println("Error RequestId: " + e.getRequestId());
    52            System.out.println("Error StatusCode: " + e.getStatusCode());
    53            System.out.println("Error Message: " + e.getMessage());
    54            System.out.println("Error ErrorType: " + e.getErrorType());
    55         } catch (BceClientException e) {
    56            System.out.println("Error Message: " + e.getMessage());
    57         }
    58      }
    59    }).start();
    60}}

查询模拟文件夹

由于BOS本身是一个(<Key>,<Value>)的存储系统,所以原则上并不会存在“文件夹”的概念,但您可以通过 Delimiter 和 Prefix 参数的配合进行文件夹功能模拟。

假设Bucket中有5个文件:bos.jpg,fun/,fun/test.jpg,fun/movie/001.avi,fun/movie/007.avi,可以把 “/” 符号作为分隔符模拟文件夹。

递归列出模拟文件夹下所有文件

可以通过设置 Prefix 参数来获取某个模拟文件夹下所有的文件:

Java
1// 构造ListObjectsRequest请求
2ListObjectsRequest listObjectsRequest = new ListObjectsRequest(<BucketName>);
3
4// 递归列出fun文件夹下的所有文件
5listObjectsRequest.setPrefix("fun/");
6
7ListObjectsResponse listing = client.listObjects(listObjectsRequest);
8
9// 遍历所有Object
10System.out.println("Objects:");
11for (BosObjectSummary objectSummary : listing.getContents()) {
12   System.out.println(objectSummary.getKey());
13}

输出:

Java
1Objects:
2fun/
3fun/movie/001.avi
4fun/movie/007.avi
5fun/test.jpg

查看模拟文件夹下的文件和子文件夹

在 Prefix 和 Delimiter 结合的情况下,可以列出模拟文件夹下的文件和子文件夹:

Java
1// 构造ListObjectsRequest请求
2ListObjectsRequest listObjectsRequest = new ListObjectsRequest(<BucketName>);
3
4// 指定"/" 为模拟文件夹的分隔符
5listObjectsRequest.setDelimiter("/");
6
7// 列出fun文件夹下的所有文件和子文件夹
8listObjectsRequest.setPrefix("fun/");
9
10ListObjectsResponse listing = client.listObjects(listObjectsRequest);
11
12// 遍历所有Object
13System.out.println("Objects:");
14for (BosObjectSummary objectSummary : listing.getContents()) {
15   System.out.println(objectSummary.getKey());
16}
17
18// 遍历所有CommonPrefix
19System.out.println("\nCommonPrefixs:");
20for (String commonPrefix : listing.getCommonPrefixes()) {
21   System.out.println(commonPrefix);
22}

输出:

Java
1Objects:
2fun/
3fun/test.jpg
4
5CommonPrefixs:
6fun/movie/

说明:

返回的结果中, Objects 的列表中给出的是fun文件夹下的文件。而 CommonPrefixs 的列表中给出的是fun文件夹下的所有子文件夹。可以看出 fun/movie/001.avi , fun/movie/007.avi 两个文件并没有被列出来,因为它们属于 fun 文件夹下的 movie 子文件夹下的文件。

获取Object

简单的获取Object

用户可以通过如下代码将Object读取到一个流中。

  • 基本流程

    1. 创建BOSClient类的实例。
    2. 执行BOSClient.getObject()方法,会返回指定的BosObject。
    3. 将BosObject读到流中,然后对流进行操作。
  • 示例代码

    Java
    1// 获取Object,返回结果为BosObject对象
    2BosObject object = client.getObject(<BucketName>, <ObjectKey>);
    3
    4// 获取ObjectMeta
    5ObjectMetadata meta = object.getObjectMetadata();
    6
    7// 获取Object的输入流
    8InputStream objectContent = object.getObjectContent();
    9
    10// 处理Object
    11...
    12
    13// 关闭流
    14objectContent.close();

    注意:

    • BosObject中包含了Object的各种信息,包含Object所在的Bucket、Object的名称、MetaData以及一个输入流,用户可以通过操作输入流将Object的内容读取到文件或者内存中。
    • ObjectMetadata中包含了Object上传时定义的ETag,Http Header以及自定义的元数据。
    • 通过BosObject的getObjectContent()方法,还可以获取返回Object的输入流,用户可以读取这个输入流来对Object的内容进行操作。
  • 完整示例

    Java
    1import java.io.BufferedReader;
    2import java.io.IOException;
    3import java.io.InputStream;
    4import java.io.InputStreamReader;
    5import android.app.Activity;
    6import android.os.Bundle;
    7import com.baidubce.BceClientException;
    8import com.baidubce.BceServiceException;
    9import com.baidubce.auth.DefaultBceCredentials;
    10import com.baidubce.demo.R;
    11import com.baidubce.services.bos.BosClient;
    12import com.baidubce.services.bos.BosClientConfiguration;
    13import com.baidubce.services.bos.model.BosObject;
    14import com.baidubce.services.bos.model.ObjectMetadata;
    15
    16public class ExampleActivity extends Activity {
    17
    18private String bucketName = <BucketName>;
    19private String objectKey = <ObjectKey>;
    20
    21@Override
    22protected void onCreate(Bundle savedInstanceState) {
    23    super.onCreate(savedInstanceState);
    24    setContentView(R.layout.activity_main);
    25    new Thread(new Runnable() {
    26        @Override
    27        public void run() {
    28            try {
    29                BosClientConfiguration config = new BosClientConfiguration();
    30                config.setCredentials(new DefaultBceCredentials(<AccessKeyID>, <SecretAccessKey>));
    31                config.setEndpoint(<EndPoint>);
    32                BosClient client = new BosClient(config);
    33
    34                // 获取Object,返回结果为BosObject对象
    35                BosObject object = client.getObject(<BucketName>, <ObjectKey>);
    36
    37                // 获取ObjectMeta
    38                ObjectMetadata meta = object.getObjectMetadata();
    39
    40                // 获取Object的输入流
    41                InputStream objectContent = object.getObjectContent();
    42
    43                // 处理Object
    44                FileOutputStream fos=new FileOutputStream(android.os.Environment.getExternalStorageDirectory()+"/1/file");  
    45                byte[] buffer=new byte[<bufferSize>];  
    46                int count=0;  
    47                while ((count=objectContent.read(buffer))>=0) {  
    48                    fos.write(buffer,0,count);  
    49                }  
    50
    51                System.out.println(meta.getETag());
    52                System.out.println(meta.getContentLength());
    53
    54                // 关闭流
    55                objectContent.close();
    56                fos.close(); 
    57
    58            } catch (BceServiceException e) {
    59                System.out.println("Error ErrorCode: " + e.getErrorCode());
    60                System.out.println("Error RequestId: " + e.getRequestId());
    61                System.out.println("Error StatusCode: " + e.getStatusCode());
    62                System.out.println("Error Message: " + e.getMessage());
    63                System.out.println("Error ErrorType: " + e.getErrorType());
    64            } catch (BceClientException e) {
    65                System.out.println("Error Message: " + e.getMessage());
    66            } catch (IOException e) {
    67                // TODO Auto-generated catch block
    68                e.printStackTrace();
    69            }
    70        }
    71    }).start();
    72}}

通过GetObjectRequest获取Object

为了实现更多的功能,可以通过使用GetObjectRequest来获取Object。

  • 基本流程

    1. 创建GetObjectRequest类的实例。
    2. 对GetObjectRequest执行setRange( ),获取Object中所需的字节数据。
    3. 执行client.getObject( )操作。
  • 示例代码

    Java
    1// 新建GetObjectRequest
    2GetObjectRequest getObjectRequest = new GetObjectRequest(<BucketName>, <ObjectKey>);
    3
    4// 获取0~100字节范围内的数据
    5getObjectRequest.setRange(0, 100);
    6
    7// 获取Object,返回结果为BosObject对象
    8BosObject object = client.getObject(getObjectRequest);

    说明:通过getObjectRequest的setRange( )方法可以设置返回Object的范围。用户可以用此功能实现文件的分段下载和断点续传。

获取下载进度

用户可以通过回调函数获取到下载的进度信息。

SDK提供的下载进度回调接口如下,您可以在其中定义在上传过程中您所需要的操作,如更新界面等等。

Java
1public interface BceProgressCallback<T extends AbstractBceRequest> {
2          // request为下载的请求
3          // currentSize为当前下载的大小(单位:byte)
4          // totalSize为本次请求需要下载的总大小(单位:byte)
5          void onProgress(T request, long currentSize, long totalSize);
6    }
  • 示例代码

    Java
    1GetObjectRequest request = new GetObjectRequest()
    2        .withBucketName(this.bucketName)
    3        .withKey(objectKey)
    4        .withRange(0, 5);
    5request.setProgressCallback(new BosProgressCallback<GetObjectRequest>() {
    6    @Override
    7    public void onProgress(GetObjectRequest request, long currentSize, long totalSize) {
    8        Log.e(currentSize + "", totalSize + "");
    9    }
    10});
    11InputStream input = this.client.getObject(request).getObjectContent();

    注意: 下载进度接口与上传进度接口有所不同,无法指定每次回调时,下载量增长的片段大小。

下载Object到指定路径

用户可以通过如下代码直接将Object下载到指定路径。

  • 基本流程

    1. 创建GetObjectRequest类的实例。
    2. 执行client.getObject( )操作。
    3. Object可以直接下载到指定路径。
  • 示例代码

    Java
    1// 新建GetObjectRequest
    2GetObjectRequest getObjectRequest = new GetObjectRequest(<BucketName>, <ObjectKey>);
    3
    4// 下载Object到文件
    5ObjectMetadata objectMetadata = client.getObject(getObjectRequest, new File("/path/to/file","w+"));

    说明:当使用上面方法将Object直接下载到指定路径时,方法会返回ObjectMetadata对象。

获取Object的storageClass

Object的storage class属性分为STANDARD(标准存储)、STANDARD_IA(低频存储)、COLD(冷存储)和ARCHIVE(归档存储)。

示例代码

Java
1public void getObjectStorageClass(){
2  //...
3ObjectMetadata meta = client.getObjectMetadata(bucketName, key);
4String storageClass = meta.getStorageClass();
5}

只获取ObjectMetadata

通过 getObjectMetadata() 方法可以只获取ObjectMetadata而不获取Object的实体。

示例代码

Java
1ObjectMetadata objectMetadata = client.getObjectMetadata(<BucketName>, <ObjectKey>);

获取Object的URL

您可以通过如下代码获取指定Object的URL,该功能通常用于您将Object的URL临时分享给其他用户的场景。

  • 基本流程

    1. 创建BOSClient类的实例。
    2. 执行BOSClient.generatePresignedUrl( )方法。
    3. 返回一个Object的URL。
  • 示例代码

    Java
    1URL url = client.generatePresignedUrl(<BucketName>, <ObjectKey>, <ExpirationInSeconds>);

    说明:ExpirationInSeconds为指定的URL有效时长,时间从当前时间算起,为可选参数,不配置时系统默认值为1800秒。如果要设置为永久不失效的时间,可以将ExpirationInSeconds参数设置为 -1,不可设置为其他负数。

  • 完整示例

    Java
    1import java.net.URL;
    2import android.app.Activity;
    3import android.content.Intent;
    4import android.net.Uri;
    5import android.os.Bundle;
    6import com.baidubce.BceClientException;
    7import com.baidubce.BceServiceException;
    8import com.baidubce.auth.DefaultBceCredentials;
    9import com.baidubce.demo.R;
    10import com.baidubce.services.bos.BosClient;
    11import com.baidubce.services.bos.BosClientConfiguration;
    12
    13public class ExampleActivity extends Activity {
    14private String bucketName = <BucketName>;
    15private String objectKey = <ObjectKey>;
    16
    17@Override
    18protected void onCreate(Bundle savedInstanceState) {
    19    super.onCreate(savedInstanceState);
    20    setContentView(R.layout.activity_main);
    21    new Thread(new Runnable() {
    22        @Override
    23        public void run() {
    24            try {
    25                BosClientConfiguration config = new BosClientConfiguration();
    26                config.setCredentials(new DefaultBceCredentials(<AccessKeyID>, <SecretAccessKey>));
    27                config.setEndpoint(<EndPoint>);
    28                BosClient client = new BosClient(config);
    29
    30                //获取Object的URL
    31                URL url = client.generatePresignedUrl(<BucketName>, <ObjectKey>, 2000);  
    32                Uri uri = Uri.parse(url.toString());
    33                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
    34
    35                //执行URL
    36                startActivity(intent);
    37
    38            } catch (BceServiceException e) {
    39                System.out.println("Error ErrorCode: " + e.getErrorCode());
    40                System.out.println("Error RequestId: " + e.getRequestId());
    41                System.out.println("Error StatusCode: " + e.getStatusCode());
    42                System.out.println("Error Message: " + e.getMessage());
    43                System.out.println("Error ErrorType: " + e.getErrorType());
    44            } catch (BceClientException e) {
    45                System.out.println("Error Message: " + e.getMessage());
    46            } 
    47        }
    48    }).start();
    49}}

Object权限控制

设置Object的访问权限

目前BOS支持两种方式设置ACL。第一种是使用Canned Acl,在PutObjectAcl的时候,通过头域的"x-bce-acl"或者"x-bce-grant-permission'来设置object访问权限,当前可设置的权限包括private和public-read,两种类型的header不可以同时在一个请求中出现。第二种方式是上传一个ACL文件。

详细信息请参考设置Object权限控制。

1、通过使用头域的"x-bce-acl"或者"x-bce-grant-permission'来设置object访问权限

  • set object acl 第一种方式(以请求头方式设置)
Java
1SetObjectAclRequest setObjectAclRequest = new SetObjectAclRequest("yourBucketName","objectKey",CannedAccessControlList.PublicRead);
2client.setObjectAcl(setObjectAclRequest);
  • set object acl 第一种方式(以请求头方式设置 xBceGrantRead)
Java
1String xBceGrantRead = "id=\"user_id1\""+",id=\"user_id2\"";
2SetObjectAclRequest setObjectAclRequest = new SetObjectAclRequest();
3setObjectAclRequest.withBucketName("yourBucketName");
4setObjectAclRequest.withKey("objectKey");
5setObjectAclRequest.setxBceGrantRead(xBceGrantRead);
6client.setObjectAcl(setObjectAclRequest);
  • set object acl 第一种方式(已请求头方式设置 xBceGrantFullControl)
Java
1String xBceGrantFullControl = "id=\"user_id1\""+",id=\"user_id2\"";
2SetObjectAclRequest setObjectAclRequest = new SetObjectAclRequest();
3setObjectAclRequest.withBucketName("yourBucketName");
4setObjectAclRequest.withKey("objectKey");
5setObjectAclRequest.setxBceGrantFullControl(xBceGrantFullControl);
6client.setObjectAcl(setObjectAclRequest);

2、通过setObjectAcl设置object访问权限

  • set object acl 第二种方式(json字符串)
Java
1String jsonObjectAcl = "{\"accessControlList\":["+ "{\"grantee\":[{\"id\":\"*\"}], "+ "\"permission\":[\"FULL_CONTROL\"]"+"}]}";
2
3SetObjectAclRequest setObjectAclRequest = new SetObjectAclRequest("yourBucketName","objectKey",jsonObjectAcl);
4
5client.setObjectAcl(setObjectAclRequest);
  • set object acl 第二种方式,用户只需指定指定参数即可
Java
1List<Grant> grants = new ArrayList<Grant>();
2List<Grantee> grantees = new ArrayList<Grantee>();
3List<Permission> permissions = new ArrayList<Permission>();
4
5// 授权给特定用户
6grantees.add(new Grantee("user_id1"));
7grantees.add(new Grantee("user_id2"));
8grantees.add(new Grantee("user_id3"));
9
10// 设置权限
11permissions.add(Permission.READ);
12grants.add(new Grant().withGrantee(grantees).withPermission(permissions));
13
14SetObjectAclRequest setObjectAclRequest = new SetObjectAclRequest("yourBucketName","objectKey", grants);
15client.setObjectAcl(setObjectAclRequest);

查看Object的权限

如下代码可以查Object的权限:

Java
1GetObjectAclRequest getObjectRequest = new GetObjectAclRequest();
2getObjectRequest.withBucketName("yourBucketName");
3getObjectRequest.withKey("objectKey");
4GetObjectAclResponse response = client.getObjectAcl(getObjectRequest);

getObjectAcl方法返回的解析类中可供调用的参数有:

参数 说明
accessControlList 标识Object的权限列表
grantee 标识被授权人
-id 被授权人ID
permission 标识被授权人的权限

删除Object的权限

如下代码可以删除Object的权限:

Java
1DeleteObjectAclRequest deleteObjectAclRequest = new DeleteObjectAclRequest("yourBucketName","objectKey");
2
3client.deleteObjectAcl(deleteObjectAclRequest);

删除Object

  • 基本流程

    1. 创建BOSClient类的实例。
    2. 执行BOSClient.deleteObject()方法。
    3. 若操作失败后抛出异常,若成功无返回值。
  • 示例代码

    Java
    1// 删除Object
    2client.deleteObject(<BucketName>, <ObjectKey>);   //指定要删除的Object所在Bucket名称和该Object名称
  • 完整示例

    Java
    1import android.app.Activity;
    2import android.os.Bundle;
    3import com.baidubce.BceClientException;
    4import com.baidubce.BceServiceException;
    5import com.baidubce.auth.DefaultBceCredentials;
    6import com.baidubce.demo.R;
    7import com.baidubce.services.bos.BosClient;
    8import com.baidubce.services.bos.BosClientConfiguration;
    9
    10public class ExampleActivity extends Activity {
    11
    12private String bucketName = <BucketName>;
    13private String objectKey = <ObjectKey>;
    14
    15@Override
    16protected void onCreate(Bundle savedInstanceState) {
    17    super.onCreate(savedInstanceState);
    18    setContentView(R.layout.activity_main);
    19    new Thread(new Runnable() {
    20        @Override
    21        public void run() {
    22            try {
    23                BosClientConfiguration config = new BosClientConfiguration();
    24                config.setCredentials(new DefaultBceCredentials(<AccessKeyID>, <SecretAccessKey>));
    25                config.setEndpoint(<EndPoint>);
    26                BosClient client = new BosClient(config);
    27
    28                // 删除Object
    29                client.deleteObject(<BucketName>, <ObjectKey>);   //指定要删除的Object所在Bucket名称和该Object名称
    30
    31            } catch (BceServiceException e) {
    32                System.out.println("Error ErrorCode: " + e.getErrorCode());
    33                System.out.println("Error RequestId: " + e.getRequestId());
    34                System.out.println("Error StatusCode: " + e.getStatusCode());
    35                System.out.println("Error Message: " + e.getMessage());
    36                System.out.println("Error ErrorType: " + e.getErrorType());
    37            } catch (BceClientException e) {
    38                System.out.println("Error Message: " + e.getMessage());
    39            } 
    40        }
    41    }).start();
    42}}

拷贝Object

简单拷贝Object

  • 基本流程

    1. 创建BOSClient 类的实例。
    2. 执行BOSClient.copyObject( )方法。
    3. 返回CopyObjectResponse类实例,可通过getETag()/getLastModified()获取eTag和最后修改时间。
  • 示例代码

    Java
    1// 拷贝Object
    2CopyObjectResponse copyObjectResponse = client.copyObject(<SrcBucketName>, <SrcKey>, <DestBucketName>, <DestKey>);  //SrcBucketName, SrcKey为原地址,DestBucketName, DestKey为拷贝到的目的地址
    3
    4// 打印结果
    5System.out.println("ETag: " + copyObjectResponse.getETag() + " LastModified: " + copyObjectResponse.getLastModified());
  • 完整示例

    Java
    1import android.app.Activity;
    2import android.os.Bundle;
    3import com.baidubce.BceClientException;
    4import com.baidubce.BceServiceException;
    5import com.baidubce.auth.DefaultBceCredentials;
    6import com.baidubce.demo.R;
    7import com.baidubce.services.bos.BosClient;
    8import com.baidubce.services.bos.BosClientConfiguration;
    9import com.baidubce.services.bos.model.CopyObjectResponse;
    10
    11public class ExampleActivity extends Activity {
    12
    13private String srcBucketName = <SrcBucketName>;
    14private String srcKey = <SrcKey>;
    15
    16private String destBucketName = <DestBucketName>;
    17private String destKey = <DestKey>;
    18
    19@Override
    20protected void onCreate(Bundle savedInstanceState) {
    21    super.onCreate(savedInstanceState);
    22    setContentView(R.layout.activity_main);
    23    new Thread(new Runnable() {
    24        @Override
    25        public void run() {
    26            try {
    27                BosClientConfiguration config = new BosClientConfiguration();
    28                config.setCredentials(new DefaultBceCredentials(<AccessKeyID>, <SecretAccessKey>));
    29                config.setEndpoint(<EndPoint>);
    30                BosClient client = new BosClient(config);
    31
    32                // 拷贝Object
    33                CopyObjectResponse copyObjectResponse = client.copyObject(<SrcBucketName>, <SrcKey>, <DestBucketName>, <DestKey>);
    34
    35                // 打印结果
    36                System.out.println("ETag: " + copyObjectResponse.getETag() + " LastModified: " + copyObjectResponse.getLastModified());
    37
    38            } catch (BceServiceException e) {
    39                System.out.println("Error ErrorCode: " + e.getErrorCode());
    40                System.out.println("Error RequestId: " + e.getRequestId());
    41                System.out.println("Error StatusCode: " + e.getStatusCode());
    42                System.out.println("Error Message: " + e.getMessage());
    43                System.out.println("Error ErrorType: " + e.getErrorType());
    44            } catch (BceClientException e) {
    45                System.out.println("Error Message: " + e.getMessage());
    46            } 
    47        }
    48    }).start();
    49}}

    说明:copyObject 方法返回一个 CopyObjectResponse 对象,该对象中包含了新Object的ETag和修改时间。

通过CopyObjectRequest拷贝Object

您也可以通过 CopyObjectRequest 实现Object的拷贝。该功能一般用于如下场景:

  • Copy一个Object但重新设置meta。
  • 重置某个现有Object的meta(把Src和Des设置为同一个Object)。
  • 基本流程

    1. 创建CopyObjectRequest类的实例,传入<SrcBucketName>, <SrcKey>, <DestBucketName>, <DestKey>参数。
    2. 创建ObjectMetadata类的实例。
    3. 返回CopyObjectResponse类实例,可通过getETag()/getLastModified()获取eTag和最后修改时间。
  • 示例代码

    Java
    1// 创建CopyObjectRequest对象
    2CopyObjectRequest copyObjectRequest = new CopyObjectRequest(<SrcBucketName>, <SrcKey>, <DestBucketName>, <DestKey>);
    3
    4// 设置新的Metadata
    5Map<String, String> userMetadata = new HashMap<String, String>();
    6userMetadata.put(<UserMetaKey>,<UserMetaValue>);
    7meta.setUserMetadata(userMetadata);
    8copyObjectRequest.setNewObjectMetadata(meta);
    9
    10// 复制Object
    11CopyObjectResponse copyObjectResponse = client.copyObject(copyObjectRequest);
    12
    13System.out.println("ETag: " + copyObjectResponse.getETag() + " LastModified: " + copyObjectResponse.getLastModified());

    说明:CopyObjectRequest 允许用户修改目的Object的ObjectMeta,同时也提供 MatchingETagConstraints 参数的设定。

Object的分块上传

分块上传的场景

除了通过putObject()方法上传文件到BOS以外,BOS还提供了另外一种上传模式:分块上传(Multipart Upload)。用户可以在如下的应用场景内(但不仅限于此),使用分块上传模式,如:

  • 需要支持断点上传。
  • 上传超过5GB大小的文件。
  • 网络条件较差,和BOS的服务器之间的连接经常断开。
  • 需要流式地上传文件。
  • 上传文件之前,无法确定上传文件的大小。

Multipart Upload分块上传流程

假设有一个文件,本地路径为 /path/to/file.zip ,由于文件比较大,使用分块上传其传输到BOS中。

  • 基本流程

    1. 初始化Multipart Upload。
    2. 上传分块。
    3. 完成分块上传。

初始化Multipart Upload

使用 initiateMultipartUpload 方法来初始化一个分块上传事件:

  • 示例代码

    Java
    1// 开始Multipart Upload
    2InitiateMultipartUploadRequest initiateMultipartUploadRequest =
    3      new InitiateMultipartUploadRequest(<BucketName>, <ObjectKey>);
    4InitiateMultipartUploadResponse initiateMultipartUploadResponse =
    5      client.initiateMultipartUpload(initiateMultipartUploadRequest);
    6
    7// 打印UploadId
    8System.out.println("UploadId: " + initiateMultipartUploadResponse.getUploadId());

    说明:initiateMultipartUpload 的返回结果中含有 UploadId ,它是区分分块上传事件的唯一标识,在后面的操作中,我们将用到它。

上传分块

将文件分块上传。

  • 示例代码

    Java
    1// 设置每块为 5MB
    2final long partSize = 1024 * 1024 * 5L;
    3
    4File partFile = new File("/path/to/file.zip");
    5
    6// 计算分块数目
    7int partCount = (int) (partFile.length() / partSize);
    8if (partFile.length() % partSize != 0) {
    9    partCount++;
    10}
    11// 新建一个List保存每个分块上传后的ETag和PartNumber
    12List<PartETag> partETags = new ArrayList<PartETag>();
    13// 获取文件流
    14FileInputStream fis = new FileInputStream(partFile);
    15for (int i = 0; i < partCount; i++) {
    16
    17    // 计算每个分块的大小
    18    long skipBytes = partSize * i;
    19    long size = partSize < partFile.length() - skipBytes ?
    20              partSize : partFile.length() - skipBytes;
    21
    22    byte[] buf = new byte[(int)size];
    23    int offset = 0;
    24    while (true) {
    25        int byteRead = fis.read(buf, offset, (int)size);
    26        offset += byteRead;
    27        if (byteRead < 0 || offset >= size) {
    28           break;
    29        }
    30    }
    31    ByteArrayInputStream bufStream = new ByteArrayInputStream(buf);
    32
    33    // 创建UploadPartRequest,上传分块
    34    UploadPartRequest uploadPartRequest = new UploadPartRequest();
    35    uploadPartRequest.setBucketName(bucketName);
    36    uploadPartRequest.setKey(objectkey);
    37    uploadPartRequest.setUploadId(initiateMultipartUploadResponse.getUploadId());
    38    uploadPartRequest.setInputStream(bufStream);
    39    uploadPartRequest.setPartSize(size);
    40    uploadPartRequest.setPartNumber(i + 1);
    41    // 上传进度回调
    42    uploadPartRequest.setProgressCallback(new BosProgressCallback<UploadPartRequest>() {
    43        @Override
    44        public void onProgress(UploadPartRequest request, long currentSize, long totalSize) {
    45            Log.e(currentSize + "", totalSize + "");
    46        }
    47    });
    48
    49    UploadPartResponse uploadPartResponse = client.uploadPart(uploadPartRequest);
    50
    51    // 将返回的PartETag保存到List中。
    52    partETags.add(uploadPartResponse.getPartETag());
    53
    54    System.out.println(uploadPartResponse.getPartETag());
    55  }
    56  // 关闭文件
    57  fis.close();

    注意:上面代码的核心是调用 UploadPart 方法来上传每一个分块,但是要注意以下几点:

    • UploadPart 方法要求Part大小是1MB的整数倍或大于5MB。但是Upload Part接口并不会立即校验上传Part的大小;只有当Complete Multipart Upload的时候才会校验。
    • 为了保证数据在网络传输过程中不出现错误,建议您在UploadPart后,使用每个分块BOS返回的Content-MD5值分别验证已上传分块数据的正确性。当所有分块数据合成一个Object后,不再含MD5值。
    • Part号码的范围是1~10000。如果超出这个范围,BOS将返回InvalidArgument的错误码。
    • 每次上传Part时都要把流定位到此次上传块开头所对应的位置。
    • 每次上传Part之后,BOS的返回结果会包含一个 PartETag 对象,它是上传块的ETag与块编号(PartNumber)的组合,在后续完成分块上传的步骤中会用到它,因此需要将其保存起来。一般来讲这些 PartETag 对象将被保存到List中。
    • 进度回调接口的使用可以参考“获取上传进度”一章。

完成分块上传

  • 示例代码

    Java
    1CompleteMultipartUploadRequest completeMultipartUploadRequest =
    2      new CompleteMultipartUploadRequest(<BucketName>, <ObjectKey>, 
    3            initiateMultipartUploadResponse.getUploadId(), partETags);
    4
    5// 完成分块上传
    6CompleteMultipartUploadResponse completeMultipartUploadResponse =
    7      client.completeMultipartUpload(completeMultipartUploadRequest);
    8
    9// 打印Object的ETag
    10System.out.println(completeMultipartUploadResponse.getETag());

    说明:上面代码中的 partETags 是第二步中保存的partETag的列表,BOS收到用户提交的Part列表后,会逐一验证每个数据Part的有效性。当所有的数据Part验证通过后,BOS将把这些数据part组合成一个完整的Object。

  • 完整示例

    Java
    1import java.io.File;
    2import java.io.FileInputStream;
    3import java.io.IOException;
    4import java.util.ArrayList;
    5import java.util.List;
    6import org.json.JSONException;
    7import android.app.Activity;
    8import android.os.Bundle;
    9import com.baidubce.BceClientException;
    10import com.baidubce.BceServiceException;
    11import com.baidubce.auth.DefaultBceCredentials;
    12import com.baidubce.demo.R;
    13import com.baidubce.services.bos.BosClient;
    14import com.baidubce.services.bos.BosClientConfiguration;
    15import com.baidubce.services.bos.model.CompleteMultipartUploadRequest;
    16import com.baidubce.services.bos.model.CompleteMultipartUploadResponse;
    17import com.baidubce.services.bos.model.InitiateMultipartUploadRequest;
    18import com.baidubce.services.bos.model.InitiateMultipartUploadResponse;
    19import com.baidubce.services.bos.model.PartETag;
    20import com.baidubce.services.bos.model.UploadPartRequest;
    21import com.baidubce.services.bos.model.UploadPartResponse;
    22
    23public class ExampleActivity extends Activity {
    24
    25private String bucketName = <BucketName>;
    26private String objectKey = <ObjectKey>;
    27​    
    28@Override
    29protected void onCreate(Bundle savedInstanceState) {
    30    super.onCreate(savedInstanceState);
    31    setContentView(R.layout.activity_main);
    32    new Thread(new Runnable() {
    33        @Override
    34        public void run() {
    35            try {
    36              BosClientConfiguration config = new BosClientConfiguration();
    37              config.setCredentials(new DefaultBceCredentials(<AccessKeyID>, <SecretAccessKey>));
    38              config.setEndpoint(<EndPoint>);
    39              BosClient client = new BosClient(config);
    40
    41              // 开始Multipart Upload
    42              InitiateMultipartUploadRequest initiateMultipartUploadRequest = new InitiateMultipartUploadRequest(<BucketName>, <ObjectKey>);
    43              InitiateMultipartUploadResponse initiateMultipartUploadResponse =
    44                        client.initiateMultipartUpload(initiateMultipartUploadRequest);
    45
    46              // 打印UploadId
    47              System.out.println("UploadId: " + initiateMultipartUploadResponse.getUploadId());
    48
    49              // 设置每块为 5MB
    50              final long partSize = 1024 * 1024 * 5L;
    51
    52              File partFile = new File("/path/to/file.zip");
    53
    54              // 计算分块数目
    55              int partCount = (int) (partFile.length() / partSize);
    56              if (partFile.length() % partSize != 0) {
    57                  partCount++;
    58              }
    59
    60              // 新建一个List保存每个分块上传后的ETag和PartNumber
    61              List<PartETag> partETags = new ArrayList<PartETag>();
    62
    63              // 获取文件流
    64              FileInputStream fis = new FileInputStream(partFile);
    65              for (int i = 0; i < partCount; i++) {                       
    66
    67                  // 计算每个分块的大小
    68                  long skipBytes = partSize * i;
    69                  long size = partSize < partFile.length() - skipBytes ?
    70                          partSize : partFile.length() - skipBytes;
    71
    72                  byte[] buf = new byte[(int)size];
    73                  int offset = 0;
    74                  while (true) {
    75                      int byteRead = fis.read(buf, offset, (int)size);
    76                      offset += byteRead;
    77                      if (byteRead < 0 || offset >= size) {
    78                          break;
    79                      }
    80                  }
    81                  ByteArrayInputStream bufStream = new ByteArrayInputStream(buf);
    82
    83                  // 创建UploadPartRequest,上传分块
    84                  UploadPartRequest uploadPartRequest = new UploadPartRequest();
    85                  uploadPartRequest.setBucketName(<BucketName>);
    86                  uploadPartRequest.setKey(<ObjectKey>);
    87                  uploadPartRequest.setUploadId(initiateMultipartUploadResponse.getUploadId());
    88                  uploadPartRequest.setInputStream(fis);
    89                  uploadPartRequest.setPartSize(size);
    90                  uploadPartRequest.setPartNumber(i + 1);
    91                  UploadPartResponse uploadPartResponse = client.uploadPart(uploadPartRequest);
    92
    93                  // 将返回的PartETag保存到List中。
    94                  partETags.add(uploadPartResponse.getPartETag());
    95
    96                  System.out.println(uploadPartResponse.getPartETag());                                         
    97              }
    98              // 关闭文件
    99              fis.close();
    100
    101              CompleteMultipartUploadRequest completeMultipartUploadRequest = new CompleteMultipartUploadRequest(<BucketName>, <ObjectKey>, initiateMultipartUploadResponse.getUploadId(), partETags);
    102
    103              // 完成分块上传
    104              CompleteMultipartUploadResponse completeMultipartUploadResponse =
    105                      client.completeMultipartUpload(completeMultipartUploadRequest);
    106
    107              // 打印Object的ETag
    108              System.out.println(completeMultipartUploadResponse.getETag());
    109
    110            } catch (BceServiceException e) {
    111                System.out.println("Error ErrorCode: " + e.getErrorCode());
    112                System.out.println("Error RequestId: " + e.getRequestId());
    113                System.out.println("Error StatusCode: " + e.getStatusCode());
    114                System.out.println("Error Message: " + e.getMessage());
    115                System.out.println("Error ErrorType: " + e.getErrorType());
    116            } catch (BceClientException e) {
    117                System.out.println("Error Message: " + e.getMessage());
    118            } catch (IOException e) {
    119                // TODO Auto-generated catch block
    120                e.printStackTrace();
    121            } catch (JSONException e) {
    122                // TODO Auto-generated catch block
    123                e.printStackTrace();
    124            } 
    125        }
    126    }).start();
    127}}

取消分块上传

用户可以使用abortMultipartUpload方法取消分块上传。

  • 示例代码

    Java
    1AbortMultipartUploadRequest abortMultipartUploadRequest =
    2    new AbortMultipartUploadRequest(<BucketName>, <ObjectKey>, <UploadId>);
    3
    4// 取消分块上传
    5client.abortMultipartUpload(abortMultipartUploadRequest);

获取未完成的分块上传

用户可以使用 listMultipartUploads 方法获取Bucket内未完成的分块上传事件。

  • 基本流程

    1. 创建listMultipartUploadsRequest类的实例,传入<BucketName>参数。
    2. 创建BOSClient类的实例,执行BOSClient.listMultipartUploads( )方法。
    3. listMultipartUploads()返回所有已上传part的信息。
  • 示例代码

    Java
    1ListMultipartUploadsRequest listMultipartUploadsRequest = 
    2    new ListMultipartUploadsRequest(<BucketName>);
    3
    4// 获取Bucket内所有上传事件
    5ListMultipartUploadsResponse list = client.listMultipartUploads(listMultipartUploadsRequest);
    6​    
    7// 遍历所有上传事件
    8for (MultipartUploadSummary multipartUpload : list.getMultipartUploads()) {
    9    System.out.println("Key: " + multipartUpload.getKey() + " UploadId: " + multipartUpload.getUploadId());
    10}

    注意:

    • 默认情况下,如果Bucket中的分块上传事件的数目大于1000,则只会返回1000个Object,并且返回结果中IsTruncated的值为True,同时返回NextKeyMarker作为下次读取的起点。
    • 若想获取更多分块上传事件,可以使用KeyMarker参数分次读取。
  • 完整示例

    Java
    1import android.app.Activity;
    2import android.os.Bundle;
    3import com.baidubce.BceClientException;
    4import com.baidubce.BceServiceException;
    5import com.baidubce.auth.DefaultBceCredentials;
    6import com.baidubce.demo.R;
    7import com.baidubce.services.bos.BosClient;
    8import com.baidubce.services.bos.BosClientConfiguration;
    9import com.baidubce.services.bos.model.ListMultipartUploadsRequest;
    10import com.baidubce.services.bos.model.ListMultipartUploadsResponse;
    11import com.baidubce.services.bos.model.MultipartUploadSummary;
    12
    13public class ExampleActivity extends Activity {
    14
    15private String bucketName = <BucketName>;
    16
    17@Override
    18protected void onCreate(Bundle savedInstanceState) {
    19    super.onCreate(savedInstanceState);
    20    setContentView(R.layout.activity_main);
    21    new Thread(new Runnable() {
    22        @Override
    23        public void run() {
    24            try {
    25                BosClientConfiguration config = new BosClientConfiguration();
    26                config.setCredentials(new DefaultBceCredentials(<AccessKeyID>, <SecretAccessKey>));
    27                config.setEndpoint(<EndPoint>);
    28                BosClient client = new BosClient(config);
    29
    30                ListMultipartUploadsRequest listMultipartUploadsRequest = 
    31                        new ListMultipartUploadsRequest(<BucketName>);
    32
    33                    // 获取Bucket内所有上传事件
    34                ListMultipartUploadsResponse listing = client.listMultipartUploads(listMultipartUploadsRequest);
    35
    36                 // 遍历所有上传事件
    37                 for (MultipartUploadSummary multipartUpload : listing.getMultipartUploads()) {
    38                     System.out.println("Key: " + multipartUpload.getKey() + " UploadId: " + multipartUpload.getUploadId());
    39                 }
    40
    41            } catch (BceServiceException e) {
    42                System.out.println("Error ErrorCode: " + e.getErrorCode());
    43                System.out.println("Error RequestId: " + e.getRequestId());
    44                System.out.println("Error StatusCode: " + e.getStatusCode());
    45                System.out.println("Error ErrorType: " + e.getErrorType());
    46                System.out.println("Error Message: " + e.getMessage());
    47            } catch (BceClientException e) {
    48                System.out.println("Error Message: " + e.getMessage());
    49            } 
    50        }
    51    }).start();
    52}}

获取所有已上传的分块信息

用户可以使用 listParts 方法获取某个上传事件中所有已上传的块。

  • 基本流程

    1. 创建ListPartsRequest类的实例,传入<BucketName>,<ObjectKey>, <UploadId>参数。
    2. 创建BOSClient类的实例,执行BOSClient.listParts( )方法。
    3. listParts()返回所有已上传part的信息。
  • 示例代码

    Java
    1ListPartsRequest listPartsRequest = new ListPartsRequest(<BucketName>, <ObjectKey>, <UploadId>);
    2​    
    3// 获取上传的所有Part信息
    4ListPartsResponse partListing = client.listParts(listPartsRequest);
    5​    
    6// 遍历所有Part
    7for (PartSummary part : partListing.getParts()) {
    8    System.out.println("PartNumber: " + part.getPartNumber() + " ETag: " + part.getETag());
    9}

    注意:

    • 默认情况下,如果Bucket中的分块上传事件的数目大于1000,则只会返回1000个Object,并且返回结果中IsTruncated的值为True,同时返回NextPartNumberMarker作为下次读取的起点。
    • 若想获取更多已上传的分块信息,可以使用PartNumberMarker参数分次读取。
  • 完整示例

    Java
    1import android.app.Activity;
    2import android.os.Bundle;
    3import com.baidubce.BceClientException;
    4import com.baidubce.BceServiceException;
    5import com.baidubce.auth.DefaultBceCredentials;
    6import com.baidubce.demo.R;
    7import com.baidubce.services.bos.BosClient;
    8import com.baidubce.services.bos.BosClientConfiguration;
    9import com.baidubce.services.bos.model.ListPartsRequest;
    10import com.baidubce.services.bos.model.ListPartsResponse;
    11import com.baidubce.services.bos.model.PartSummary;
    12
    13public class ExampleActivity extends Activity {
    14
    15private String bucketName = <BucketName>;
    16private String objectKey = <ObjectKey>;
    17private String uploadId = <UploadId>;
    18
    19@Override
    20protected void onCreate(Bundle savedInstanceState) {
    21    super.onCreate(savedInstanceState);
    22    setContentView(R.layout.activity_main);
    23    new Thread(new Runnable() {
    24        @Override
    25        public void run() {
    26            try {
    27                BosClientConfiguration config = new BosClientConfiguration();
    28                config.setCredentials(new DefaultBceCredentials(<AccessKeyID>, <SecretAccessKey>));
    29                config.setEndpoint(<EndPoint>);
    30                BosClient client = new BosClient(config);
    31
    32                ListPartsRequest listPartsRequest = new ListPartsRequest(<BucketName>, <ObjectKey>, <UploadId>);
    33                listPartsRequest.setMaxParts(100);
    34                listPartsRequest.setPartNumberMarker(50);
    35
    36                 // 获取上传的所有Part信息
    37                 ListPartsResponse partListing = client.listParts(listPartsRequest);
    38
    39                 // 遍历所有Part
    40                 for (PartSummary part : partListing.getParts()) {
    41                     System.out.println("PartNumber: " + part.getPartNumber() + " ETag: " + part.getETag());
    42                 }
    43
    44            } catch (BceServiceException e) {
    45                System.out.println("Error ErrorCode: " + e.getErrorCode());
    46                System.out.println("Error RequestId: " + e.getRequestId());
    47                System.out.println("Error StatusCode: " + e.getStatusCode());
    48                System.out.println("Error ErrorType: " + e.getErrorType());
    49                System.out.println("Error Message: " + e.getMessage());
    50            } catch (BceClientException e) {
    51                System.out.println("Error Message: " + e.getMessage());
    52            } 
    53        }
    54    }).start();
    55}}

封装分块上传

在Android SDK中,Bos为用户提供了putSuperObjectFromFile接口,它对分块上传涉及到的initiateMultipartUpload、UploadPart、completeMultipartUpload三个方法进行封装,用户只需调用该接口即可完成分块上传,同时,支持进度同步回调。

  • 简单示例:

    Java
    1File file = new File("/path/to/file.zip");
    2PutSuperObjectRequest request = new PutSuperObjectRequest(bucketName, objectKey, file);
    3bosClient.putSuperObjectFromFile(request);
  • 示例:设置分块大小为2MB,线程数为4,并且每1024个byte同步进度回调

    Java
    1BosClientConfiguration config=new BosClientConfiguration();
    2config.setUploadSegmentPart(1024);
    3File file = new File("/path/to/file.zip");
    4PutSuperObjectRequest request = new PutSuperObjectRequest(bucketName, objectKey,
    5                                                          file, 1024 * 1024 * 2L, 4);
    6request.setProgressCallback(new BosProgressCallback<PutSuperObjectRequest>() {
    7    @Override
    8    public void onProgress(PutSuperObjectRequest request, long currentSize, long totalSize) {
    9        Log.e(currentSize + "", totalSize + "");
    10    }
    11});
    12bosClient.putSuperObjectFromFile(request);

注意:

  • 默认情况下,分块大小是5MB,线程数是5,进度回调周期是每2048个byte。
  • 若一个大文件耗时很长,用户想结束分块上传,可调用PutSuperObjectRequest中的cancel()方法。

上一篇
日志
下一篇
版本变更记录