
# 表单上传（POST上传）
表单上传（POST上传）是指通过HTML表单以POST请求方式，将小于5GB的文件直接从浏览器上传到OBS桶中。它一般普遍适用于WEB应用程序，其应用场景包括但不限于以下几方面：
- 用户交互与内容生成：包括社交账号头像与封面设置、富媒体内容发布、社交动态发布、用户反馈与工单等。
- 业务单据和数据交换：包括后台管理系统批量数据导入、官方证件与材料提交、网课的作业提交等。
- 与云存储服务结合：客户端将文件直传到存储服务，如上传文件到OBS等。
表单上传直接将文件从浏览器上传到OBS桶，无需经过业务服务器中转，能够显著降低服务端的负载压力，有效提高文件上传的处理效率与传输稳定性。
![](https://support.huaweicloud.com/usermanual-obs/public_sys-resources/notice_3.0-zh-cn.png)
虽然OBS服务支持您将对象上传到指定region的桶里，但是华为云并不感知您对象的具体内容。如果您对象上传行为涉及跨境传输，请您确保使用本服务符合所适用的法律法规要求。
#### 工作原理
OBS服务支持基于浏览器的表单上传对象请求，此类请求的签名信息通过表单的方式上传。计算Post表单上传请求的签名，需要先定义一个安全策略（policy），用于限制表单上传的内容和条件。客户端基于安全策略，使用 SK 生成签名后直传 OBS 对象存储。OBS验证签名和安全策略后，返回上传结果。此方案不支持多段上传，因此不适用于大文件和断点续传场景。了解表单上传的签名和安全策略相关内容，请参见[基于浏览器上传的表单中携带签名](https://support.huaweicloud.com/api-obs/obs_04_0012.html)。
图1表单上传工作原理图   
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002663315835.png "点击放大")
1. 用户通过客户端按需定义安全策略，客户端结合SK和安全策略生成签名等信息。
2. 客户端使用签名和安全策略等信息，通过表单上传方式上传文件到OBS。
3. OBS验证通过后返回成功响应，验证失败则返回错误响应。
 
#### 前提条件
- 至少已创建了一个桶，并且拥有桶的写权限。
- 如果您需要将文件归类处理，可以先新建文件夹，然后将相关的文件上传到文件夹中。新建文件夹的步骤请参见[创建和删除文件夹](https://support.huaweicloud.com/usermanual-obs/obs_03_0316.html#ZH-CN_TOPIC_0000001904384821)。
 
#### 使用限制
**大小及数量限制：**
- 表单上传可以上传小于5 GB的文件，超过5 GB的文件上传请使用[多段上传](https://support.huaweicloud.com/usermanual-obs/obs_41_0021.html)。
- 您可以通过设置桶配额限制单个桶上传对象的总容量，详情请参见[设置桶配额](https://support.huaweicloud.com/api-obs/obs_04_0052.html)。
**命名限制：**
- 对象名命名规则详见[对象命名规则](https://support.huaweicloud.com/usermanual-obs/obs_41_0015.html)。同一个桶中存储的对象名是唯一的。
- 对象名中包含[特殊字符](https://support.huaweicloud.com/usermanual-obs/obs_41_0015.html)时需要进行URL编码，例如：#obj需要编码为%23obj。
 
#### 注意事项
- [数据安全]
- [上传性能调优]
- 防止覆盖同名对象：
  - 在未开启多版本控制功能的情况下，
    - 如果新上传的文件和桶内文件重名，则新上传的文件会自动覆盖老文件，且不会保留老文件的ACL等信息；
    
    - 如果新上传的文件夹和桶内文件夹重名，则上传后会将新老文件夹合并，合并过程如遇重名文件，会使用新上传的文件夹中的文件进行覆盖。
     
  
  - 在开启了多版本控制功能的情况下，如果新上传的文件和桶内文件重名，则会在老文件上新增一个版本。关于多版本的详细介绍请参见[多版本控制简介](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829098.html)。
  
  
  您可以通过配置桶策略防止覆盖同名对象，具体桶策略参数说明及操作请参见[桶策略参数说明](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0041.html)和[自定义创建桶策略](https://support.huaweicloud.com/usermanual-obs/obs_03_0712.html)。
  
- 授权上传
  - 为了防止未经授权的用户上传文件到桶里，您可以通过设置访问控制权限来授权用户上传文件到桶内。了解表单上传权限配置相关信息，请参见[POST上传授权信息](https://support.huaweicloud.com/api-obs/obs_04_0081.html#section4)。
   
 
OBS按照对象名的UTF-8编码范围来进行分区管理，对系统进行水平扩展与动态负载均衡。如果用户在对象命名规则上使用了顺序前缀（如时间戳或字母顺序），可能导致大量对象的请求访问集中于某个特定分区，造成访问热点。热点分区上的请求速率受限，访问时延上升。
**推荐使用随机前缀对象名，这样请求就会均匀分布在多个分区，达到水平扩展的效果。**
#### 使用方式
OBS支持通过API、SDK表单上传对象。
#### 使用API
[对象操作](https://support.huaweicloud.com/api-obs/obs_04_0081.html)
#### 使用SDK
| [Java](https://support.huaweicloud.com/sdk-java-devg-obs/obs_21_0612.html) | [Python](https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_0907.html) | C不支持 | Go不支持 | [BrowserJS](https://support.huaweicloud.com/sdk-browserjs-devg-obs/obs_24_0512.html) | .NET不支持 | [Android](https://support.huaweicloud.com/sdk-android-devg-obs/obs_26_0412.html) | iOS不支持 | [PHP](https://support.huaweicloud.com/sdk-php-devg-obs/obs_28_0409.html) | [Node.js](https://support.huaweicloud.com/sdk-nodejs-devg-obs/obs_29_0412.html) |
|---|---|---|---|---|---|---|---|---|---|
   
#### 日志与监控
用户可以通过设置EG事件类型：OBS:DWR:ObjectCreated:POST和DIS事件类型：ObjectCreated，从而能够及时感知该操作并且可以触发后续操作流程。了解更多事件通知相关操作，请参见[事件通知](https://support.huaweicloud.com/usermanual-obs/obs_03_0332.html)。
#### 相关问题
- 用户可以通过设置桶配额限制单个桶上传对象的总容量，详情请参见[管理桶配额](https://support.huaweicloud.com/usermanual-obs/obs_41_0012.html) 。
- 了解更详细有关上传对象时OBS性能优化建议，请参见[OBS性能优化建议](https://support.huaweicloud.com/bestpractice-obs/obs_05_1100.html)。
 
