资源上传服务支持多种上传模式和响应模式。开发者可以根据需要组合使用两种模式,以最快的速度完成期望的业务流程。
## 上传类型
开发者可以选择以下几种上传类型来完成一个文件的上传过程。
1. 表单上传
该模型在一个单一的HTTP POST请求中完成一个文件的上传,比较适合于简单的应用场景和尺寸较小的文件。
关于表单上传的使用细节,请参见[表单上传](http://developer.qiniu.com/docs/v6/api/overview/up/form-upload.html)。
2. 分片上传
顾名思义,分片上传是将一个文件分为多个尺寸相同的小数据块,每个小数据块以一个独立的HTTP请求分别上传。所有小数据块都上传完成后,再发送一个请求在服务端将这些小数据块组织回一个逻辑资源,以完成这个上传过程。
相比简单上传而言,切片上传机制可以提供以下几个明显的好处:
1. 适合于尺寸较大的文件传输,通过切片来避免单个HTTP数据量过大而导致连接超时;
2. 在网络条件较差的环境下,较小的尺寸可以有较高的上传成功率,从而避免无休止的失败重试;
3. 超过4MB的大文件可以划分为多个4MB大小的数据块并发上传;
4. 支持断点续传;
相比简单上传,分片上传需要多次HTTP请求才能完成上传过程,因此必然会有额外的成本开销。另外代码的复杂度也会有明显增加,因此选择是否使用分片上传时应谨慎评估使用该方法的必要性。
分片上传的相关细节请参见[分片上传](chunked-upload)。
## 响应类型
从结果响应的角度,上传模型支持几种不同的响应方式和通知目标。
1. 简单反馈
简单反馈是指最直接的HTTP响应方式。客户端发起一次上传请求,然后等待服务端返回结果。服务端在处理完该次上传请求后,将处理结果以HTTP响应的方式反馈给客户端。
简单反馈的相关细节请参见[简单反馈](http://developer.qiniu.com/docs/v6/api/overview/up/response/simple-response.html)。
2. 303重定向
303重定向通常在浏览器上传的场景中使用。浏览器中的网页可以在发起上传请求的同时通知服务器,一旦上传成功,服务器应该返回HTTP 303状态码并带上一个重定向URL。浏览器在收到服务器返回的这个重定向指令后,将当前页面跳转到对应的重定向URL。
303重定向的使用细节请参见[303重定向](http://developer.qiniu.com/docs/v6/api/overview/up/response/redirect.html)。
3. 回调通知
回调通知是指客户端在上传时指定服务端在处理完上传请求后,应该通知某个特定服务器,在该服务器确认接收了该回调后才将所有结果返回给客户端。
因为加入了回调请求和响应的过程,相比简单上传,使用回调通知机制一般会导致客户端花费更多的等待时间。
回调通知的使用细节请参见[回调通知](http://developer.qiniu.com/docs/v6/api/overview/up/response/callback.html)。
4. 异步数据处理
客户端可以要求服务端在资源上传完成后以异步的方式开始处理刚刚上传的资源。要达到这个目标,可以在上传时指定相应的数据处理操作和参数。所有七牛云存储已经支持的数据处理服务均可以作为该请求的设置目标。
异步数据处理的使用细节请参见[异步数据处理](http://developer.qiniu.com/docs/v6/api/overview/up/response/persistent-op.html)。
## 授权机制
资源的上传授权机制采用[上传凭证](http://developer.qiniu.com/docs/v6/api/overview/security.html#upload-token)。
## 常见问题
[上传成功后返回的JSON会导致IE弹出下载框?](http://kb.qiniu.com/5487y5np)