全部产品
阿里云办公

大文件如何上传?

更新时间:2017-12-01 10:55:09

场景说明

OSS支持单个文件的大小,从0~48.8TB。当我们上传大文件时,可能会有以下场景:

  • 单个文件超过5GB时,无法使用简单上传方法。
  • 文件较大,虽然小于5GB,但网络环境较差,经常出现网络原因造成超时或者链接断开等错误的时候,上传容易失败。

以上情况下,可以使用分片断点续传方式或ossutil工具上传。

分片断点续传

当使用SDK或API上传大文件时,可以使用分片断点续传方式。分片上传适用于以下场景:

  • 单个文件大小超过5GB。
  • 流式上传:当对文件大小还不确定的情况下,需开始上传。比如视频监控等行业的云录像应用。
  • 恶劣的网络环境,需要断点续传大文件。如手机端,当出现上传失败的时候,可以对失败的Part进行独立的重试,而不需要重新上传其他的Part。
  • 加速上传。要上传到OSS的本地文件很大的时候,可以并行上传多个Part以加快上传。

    说明:OSS支持单个文件最大为48.8TB。

ossutil上传

当需要使用工具(而不是使用API、SDK编写代码)上传单个或多个大文件时,可以使用工具ossutil

  • 可以使用ossutil命令行工具的cp命令上传大文件,具体请参考ossutil上传
  • 支持上传的单个文件大小范围:0~48.8TB
  • 可通过--bigfile-threshold 参数控制分片并发上传的文件大小阈值。
  • ossutil上传单个或多个大文件时,可以通过-jobs项和-parallel项,控制并发,优化上传性能。具体参考ossutil文档

ossimport上传

如果需要上传大批量的文件(包括大文件)到OSS,也可以使用ossimport工具。

说明:当文件数目不是特别多,建议优先使用ossutil。

常见问题

  1. 使用简单上传(PutObject)上传大文件无法成功?

    可能是以下原因:

    • 文件大小超过5GB。
      • 解决办法:用户可以使用ossutil命令行工具,通过分块上传的接口将大文件分成多个小的分块进行上传,详细的接口使用请参考:点击查看
    • 文件小于5GB,但可能由于网络环境原因,出现上传小文件正常,但上传较大文件,请求发出去就收不到任何响应,直至超时。这有可能是服务器的MTU设置较大导致的。用户可在ECS上执行netstat -i获取当前的MTU设置值。如下图获得默认的内外网网卡的MTU都是1500。mtu

      • 解决办法1:将本机的MTU改为较小一些。Linux下修改MTU的命令是:ip link set dev eth0 mtu 1470(以ECS通过eth0内网访问OSS调整MTU值为1470)。
      • 解决办法2:也可以使用分片上传接口或ossutil工具。
  2. 上传单个大文件能不能并发上传?

    • 如使用ossutil上传时,可以通过--bigfile-threshold-jobs和-parallel选项,具体请参考ossutil文档
    • 如使用OSS API、SDK的分片上传接口,可以根据需要编写并发调用上传接口的代码。同时,部分SDK也已实现分片上传的并发控制,如Java SDK通过taskNum,Python SDK通过num_threads参数控制。

如问题还未解决,请联系售后技术支持