使用ossutil 断点文件续传

在网络不稳定的情况下,连接中断可能导致文件传输失败,使用 ossutil 2.0 的断点续传功能从中断的地方继续上传或下载,从而提升传输效率。在 ossutil 2.0 中,默认情况下不启用断点续传。如果需要使用此功能,请在执行cp命令时指定 --checkpoint-dir 参数来启用断点续传。

前提条件

断点续传机制

断点续传是将文件划分为多个较小的片段进行传输,支持在传输中断时从上次中止的位置继续传输,从而确保数据的完整性和传输的高效性。

  1. 启动传输:在传输文件时指定 --checkpoint-dir 参数,启用断点续传功能。

  2. 信息存储:启用断点续传功能后, ossutil 会将传输进度的关键信息(包括文件名称、大小、upload id 以及已上传分片等)保存到 checkpoint-dir 下的 .ucp 文件中

  3. 中断恢复:如果传输过程因网络问题或其他原因中断,可以重新启动传输。ossutil 会读取 checkpoint-dir 中保存的.ucp 文件,通过之前保存的进度信息来确定哪些分片已经成功传输,哪些分片需要继续传输。

  4. 继续传输:ossutil 根据已传输分片的信息,将未传输的分片继续传输。

参数说明

参数

说明

--checkpoint-dir

用于指定断点续传信息的存储目录。

示例

上传单个文件

下面的示例展示了如何使用 ossutil 的 cp 命令将本地文件 upload.rar 上传到指定的 bucket 存储空间。上传操作开始后,将在 your-checkpoint-dir 目录下生成一个 .ucp 文件,用于存储上传进度信息。

ossutil cp upload.rar oss://bucket --checkpoint-dir D:\\your-checkpoint-dir\

如果由于网络中断、磁盘读写异常等原因导致文件上传被中断,您可能会看到如下错误信息:

Error: upload failed, upload id: 1F71C936CF7B423493BC7A664DB3FD82, cause: operation error UploadPart: Put "https://bucket.oss-cn-hangzhou.aliyuncs.com/upload.rar?partNumber=15&uploadId=1F71C936CF7B423493BC7A664DB3FD82": dial tcp: lookup bucket.oss-cn-hangzhou.aliyuncs.com: no such host

在这种情况下,您可以通过执行相同的上传命令,利用 .ucp 文件中保存的信息,继续上传文件:

ossutil cp upload.rar oss://bucket --checkpoint-dir D:\\your-checkpoint-dir\

继续传输开始后,ossutil 会读取存储在 checkpoint-dir 目录下的上传进度信息,从未上传的分片开始上传:

Total 1 objects,6.833 GiB, Upload... done:(0 objects), 3.000%, avg 4.740 MiB/s    

批量上传文件

下面的示例展示了如何使用 ossutil 的 cp 命令将本地 local_directory 目录下的文件批量上传至指定的存储空间(bucket)。在此过程中:

  • -u 参数用于仅上传那些比目标文件更新的源文件。

  • -r 参数则允许递归复制整个目录及其所有子目录中的文件。

上传过程中,进度信息会被存储在 your-checkpoint-dir 目录中生成的一个 .ucp 文件里。

 ossutil cp -u -r local_directory oss://bucket --checkpoint-dir D:\\your-checkpoint-dir\

如果由于网络中断、磁盘读写异常等原因导致文件上传被中断,您可能会看到如下错误信息:

Error occurs. See more information in file: /ossutil-2.0.6-beta.01091200-mac-arm64/ossutil_output/ossutil_report_20250122_115545_96481.report
FinishWithError: Total 2 files, 7836503730 B, Upload done:(0 objects) failed:(2 objects, 7836503730 B)

遇到这种情况,您可以再次执行相同的命令,从 .ucp 文件中读取信息,继续上传。

 ossutil cp -u -r local_directory oss://bucket --checkpoint-dir D:\\your-checkpoint-dir\

继续传输开始后,ossutil 会读取存储在 checkpoint-dir 目录下的上传进度信息,从未上传的分片开始上传:

Total 2 files,7.298 GiB, Upload... done:(0 objects), 1.645%, avg 17.521 MiB/s