更新时间:2026-07-02 GMT+08:00
分享

表单上传(POST上传)

表单上传(POST上传)是指通过HTML表单以POST请求方式,将小于5GB的文件直接从浏览器上传到OBS桶中。它一般普遍适用于WEB应用程序,其应用场景包括但不限于以下几方面:

  • 用户交互与内容生成:包括社交账号头像与封面设置、富媒体内容发布、社交动态发布、用户反馈与工单等。
  • 业务单据和数据交换:包括后台管理系统批量数据导入、官方证件与材料提交、网课的作业提交等。
  • 与云存储服务结合:客户端将文件直传到存储服务,如上传文件到OBS等。

表单上传直接将文件从浏览器上传到OBS桶,无需经过业务服务器中转,能够显著降低服务端的负载压力,有效提高文件上传的处理效率与传输稳定性。

虽然OBS服务支持您将对象上传到指定region的桶里,但是华为云并不感知您对象的具体内容。如果您对象上传行为涉及跨境传输,请您确保使用本服务符合所适用的法律法规要求。

工作原理

OBS服务支持基于浏览器的表单上传对象请求,此类请求的签名信息通过表单的方式上传。计算Post表单上传请求的签名,需要先定义一个安全策略(policy),用于限制表单上传的内容和条件。客户端基于安全策略,使用 SK 生成签名后直传 OBS 对象存储。OBS验证签名和安全策略后,返回上传结果。此方案不支持多段上传,因此不适用于大文件和断点续传场景。了解表单上传的签名和安全策略相关内容,请参见基于浏览器上传的表单中携带签名

图1 表单上传工作原理图
  1. 用户通过客户端按需定义安全策略,客户端结合SK和安全策略生成签名等信息。
  2. 客户端使用签名和安全策略等信息,通过表单上传方式上传文件到OBS。
  3. OBS验证通过后返回成功响应,验证失败则返回错误响应。

前提条件

  • 至少已创建了一个桶,并且拥有桶的写权限。
  • 如果您需要将文件归类处理,可以先新建文件夹,然后将相关的文件上传到文件夹中。新建文件夹的步骤请参见创建文件夹

使用限制

大小及数量限制:

  • 表单上传可以上传小于5 GB的文件,超过5 GB的文件上传请使用多段上传
  • 您可以通过设置桶配额限制单个桶上传对象的总容量,详情请参见设置桶配额

命名限制:

  • 对象名命名规则详见对象命名规则。同一个桶中存储的对象名是唯一的。
  • 对象名中包含特殊字符时需要进行URL编码,例如:#obj需要编码为%23obj。

注意事项

  • 防止覆盖同名对象:
    • 在未开启多版本控制功能的情况下,
      • 如果新上传的文件和桶内文件重名,则新上传的文件会自动覆盖老文件,且不会保留老文件的ACL等信息;
      • 如果新上传的文件夹和桶内文件夹重名,则上传后会将新老文件夹合并,合并过程如遇重名文件,会使用新上传的文件夹中的文件进行覆盖。
    • 在开启了多版本控制功能的情况下,如果新上传的文件和桶内文件重名,则会在老文件上新增一个版本。关于多版本的详细介绍请参见多版本控制简介

    您可以通过配置桶策略防止覆盖同名对象,具体桶策略参数说明及操作请参见桶策略参数说明自定义创建桶策略

  • 授权上传
    • 为了防止未经授权的用户上传文件到桶里,您可以通过设置访问控制权限来授权用户上传文件到桶内。了解表单上传权限配置相关信息,请参见POST上传授权信息

OBS按照对象名的UTF-8编码范围来进行分区管理,对系统进行水平扩展与动态负载均衡。如果用户在对象命名规则上使用了顺序前缀(如时间戳或字母顺序),可能导致大量对象的请求访问集中于某个特定分区,造成访问热点。热点分区上的请求速率受限,访问时延上升。

推荐使用随机前缀对象名,这样请求就会均匀分布在多个分区,达到水平扩展的效果。

使用方式

OBS支持通过API、SDK表单上传对象。

日志与监控

用户可以通过设置EG事件类型:OBS:DWR:ObjectCreated:POST和DIS事件类型:ObjectCreated,从而能够及时感知该操作并且可以触发后续操作流程。了解更多事件通知相关操作,请参见事件通知

相关问题

  • 用户可以通过设置桶配额限制单个桶上传对象的总容量,详情请参见管理桶配额
  • 了解更详细有关上传对象时OBS性能优化建议,请参见OBS性能优化建议

相关文档