aliyun/alibabacloud-oss-python-sdk-v2

使用Uploader.upload_file无法接受到进度回调

Closed this issue · 4 comments

def _progress_fn(n, _written, total):
    progress_state['saved'] += n
    # 计算当前上传百分比,将已写入字节数与总字节数进行除法运算后取整
    rate = int(100 * (float(_written) / float(total)))

    # 打印当前上传进度,\r 表示回到行首,实现命令行中实时刷新效果
    # end='' 表示不换行,使下一次打印覆盖当前行
    print(f'\r上传进度:{rate}% ', end='')

# 创建一个用于上传文件的对象
uploader = client.uploader(enable_checkpoint=True, checkpoint_dir=tmpath())
result = uploader.upload_file(oss.PutObjectRequest(
    bucket=bucket,
    key=key,
    progress_fn=_progress_fn,
), file_path,)

在经过测试后,我们发现无论是大于 6MB(默认分片大小)的文件,还是小于 6MB 的文件,上传进度条都能够正常显示。然而需要注意的是,当分片较小时,进度条可能在瞬间就打印完成,因此可能看不到进度条更新的细节变化。

为了解决这一问题,我们建议将进度条的打印方式从:
print(f'\r上传进度:{rate}% ', end='')
更改为:
print(f'\r上传进度:{rate}% ')
通过这种方式,在更换行打印时,可以更明显地观察到进度条的更新过程。

我的文件比较大。大约1个G。

当我使用简单上传的方式时,可以正常看到进度,但是上传到100%会报错“文件过大”。
修改成Uploader上传就看不到进度了。

麻烦测试一下更大的文件看看。

经过测试,大文件,也是可以的。只不过,如果上传过程中,报了crc校验后,再次重新上传,进度条会再次从0开始,而不是接着之前的