全部产品
云市场
云游戏

文件上传

更新时间:2020-08-06 15:47:33

文件上传步骤

PDS的文件上传流程包含四个阶段,其中步骤2在只有一个分片时不需要

  • 1.初始化文件上传:调用创建文件接口,初始化文件上传;
  • 2.获取分片上传地址:当文件多分片上传时,调用获取分片上传地址接口,获取后面分片的上传地址;
  • 3.上传文件:使用给http上传数据的方式将数据上传到步骤3返回的地址中;
  • 4.合并文件:当前所有的分片上传完成后,调用完成文件上传,完成上传流程。

文件上传限制

  • 单个文件分片最大限制5GB
  • 因服务端使用流式计算SHA值,单个文件的分片需要串行上传,不支持多个分片平行上传
  • 分片不允许覆盖

秒传和预秒传

PDS提供调用者只传输数据指纹,服务端根据指纹判断数据是否已经存在,如果已经存在,直接保存数据指针,快速完成文件上传,极大降低数据上传量,同时降低上传时延,提升用户体验,但需要调用者对使用场景有一定预估,因秒传有一定的副作用,需要在调用端计算数据的md5和sha1值,如果在创建大量非重复文件场景,建议不使用。

秒传调用方式

在调用创建文件时填写如下字段:size、content_hash、content_hash_name(sha1)、content_md5,PDS系统将进行数据指纹检测,并根据检测的接口返回不同的值:

  • 如果系统返回rapid_upload=true, 则表明秒传成功,直接返回新生成的file_id,完成秒传
  • 如果系统返回rapid_upload=false,则表明Domain中无相同的数据,用户需要上传文件数据

预秒传

当文件较大(如1GB以上)时,计算整个文件的sha1、md5将花费较大的资源,但可能是数据是第一次上传,可以只计算前1KB的sha1,调用创建文件接口,将计算的sha1填写到pre_hash字段中,PDS系统将进行数据指纹检测,并根据检测的接口返回不同的值:

  • 如果系统返回http_status_code为409, 则表明预秒传匹配到可能的数据,再次调用秒传流程
  • 如果系统返回rapid_upload=false,则表明预秒传没有匹配到对应的数据,直接上传数据

小文件单分片上传

对于小文件(如10M以下)在非弱网环境下,文件可以在几秒中内完成上传,为了减少和服务端的交互,可规划单个分片上传。PDS在创建文件的返回信息中中会返回以第一个分片的上传信息,对于小文件可省去上传步骤的第三步。

小文件上传方案

大文件分片断点续传

因大文件上传时间长,需考虑以分片为单位的断点续传。简单流程如下:

分片上传方案一

上述这种方式有个缺点:在每次上传文件分片之前都需要获取一次uploadURL,解决这个问题有两种方式,

  • 获取分片上传地址和上传分片数据并发处理,一个并发串行上传分片数据,通过另外一个并发预获取分片上传地址,这样在分片上传过程中可执行进行。另外,获取分片上传地址可一次获取多个,以减少和服务端的交互。但一次获取的分片数量也不能太多,每个分片上传地址的有效期为15分钟,如果上传地址过期,需根据错误码,重新获取上传地址。

分片上传方案二