python通过sdk从minio下载文件时添加进度条

简介: Minio是就地环境下比较好用的对象存储工具,适合在CI/CD流程中使用。主要是因为GIT里用LFS来放大文件不妥,把部署流程中需要的中间文件放minio上,通过SDK去存取文件非常方便。Minio的上传文件fput_object有progress参数,但是下载文件fget_object默认没有 progress 参数,所以我们需要自己用get_object对代码稍加改造,把下载流和进度条结合在一起

背景

Minio是就地环境下比较好用的对象存储工具,适合在CI/CD流程中使用。主要是因为GIT里用LFS来放大文件不妥,把部署流程中需要的中间文件放minio上,通过SDK去存取文件非常方便。


Minio的上传文件fput_object有progress参数,但是下载文件fget_object默认没有 progress 参数,所以我们需要自己用get_object对代码稍加改造,把流下载和进度条结合在一起。先获取一下总文件大小,然后每次读取内容1MB,根据下载速率预估剩余时间

涉及到的库

https://github.com/verigak/progress

用于提供进度条

pip install progress
pip install minio

代码

from minio import Minio
from progress.bar import Bar
def get_object_with_progress(client, bucket_name, object_name):
    try:
        data = client.get_object(bucket_name, object_name)
        total_length = int(data.headers.get('content-length'))
        bar = Bar(object_name, max=total_length / 1024 / 1024, fill='*', check_tty=False,
                  suffix='%(percent).1f%% - %(eta_td)s')
        with open('./' + object_name, 'wb') as file_data:
            for d in data.stream(1024 * 1024):
                bar.next(1)
                file_data.write(d)
        bar.finish()
    except Exception as err:
        print(err)
if __name__ == '__main__':
    client = Minio(
        "play.min.io",
        access_key="Q3AM3UQ867SPQQA43P2F",
        secret_key="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
    )
    bucket_name = "downlaod"
    object_name = "eiop-timescaledb-offline.zip"
    get_object_with_progress(client, bucket_name, object_name)

实现效果

进度条.gif

目录
相关文章
|
7天前
|
存储 Python
INI文件介绍与Python处理指南
INI文件介绍与Python处理指南
|
5天前
|
存储 Python
一文让你搞懂 Python 的 pyc 文件
一文让你搞懂 Python 的 pyc 文件
28 15
|
7天前
|
Docker Python 容器
python检测docker compose文件是否正确
python检测docker compose文件是否正确
|
7天前
|
Linux UED iOS开发
Python中的自定义进度条:从零开始
Python中的自定义进度条:从零开始
|
6天前
|
人工智能 IDE 开发工具
Python实行任意文件的加密—解密
Python实行任意文件的加密—解密
15 2
|
7天前
|
人工智能 IDE 开发工具
Python实行任意文件的加密—解密
Python实行任意文件的加密—解密
15 1
|
6天前
|
UED Python
Python requests库下载文件时展示进度条的实现方法
以上就是使用Python `requests`库下载文件时展示进度条的一种实现方法,它不仅简洁易懂,而且在实际应用中非常实用。
18 0
|
7天前
|
数据处理 Python
python遍历文件夹所有文件按什么排序
python遍历文件夹所有文件按什么排序
|
7天前
|
Python
Python办公自动化:提取pdf文件中的图片
Python办公自动化:提取pdf文件中的图片
10 0
|
2月前
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
43 0
下一篇
无影云桌面