Получите обратный вызов прогресса в загрузках aws boto3 - PullRequest
0 голосов
/ 11 июля 2019

Здесь есть отличный вопрос и ответ для исходных загрузок boto:

Как загрузить файл в каталог в корзине S3 с помощью boto

, который имеет обратный вызов:

k = Key(bucket)
k.key = 'my test file'
k.set_contents_from_filename(testfile,
    cb=percent_cb, num_cb=10)

Пока я вижу, что пакет boto3 принимает обратный вызов:

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.upload_fileobj

Я не вижу эквивалента аргумента num_cb.Как я могу получить индикатор прогресса для upload_fileobj, используя boto3?

s3.upload_fileobj(data, 'mybucket', 'mykey')

1 Ответ

1 голос
/ 11 июля 2019

Если вам не нужно ограничивать количество вызывающих вызовов (и нет способа сделать это с upload_fileobj),1. показать процент

import os
import boto3

class Test:
    def __init__(self):
        self.total = 0
        self.uploaded = 0
        self.s3 = boto3.client('s3')

    def upload_callback(self, size):
        if self.total == 0:
            return
        self.uploaded += size
        print("{} %".format(int(self.uploaded / self.total * 100)))

    def upload(self, bucket, key, file):
        self.total = os.stat(file).st_size

        with open(file, 'rb') as data:
            self.s3.upload_fileobj(
                data, bucket, key, Callback=self.upload_callback)
с использованием индикатора выполнения
import os
import boto3
import progressbar


class Test2:
    def __init__(self):
        self.s3 = boto3.client('s3')

    def upload_callback(self, size):
        self.pg.update(self.pg.currval + size)

    def upload(self, bucket, key, file):
        self.pg = progressbar.progressbar.ProgressBar(
            maxval=os.stat(file).st_size)
        self.pg.start()

        with open(file, 'rb') as data:
            self.s3.upload_fileobj(
                data, bucket, key, Callback=self.upload_callback)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...