В файл было записано больше чем весь макс. размер файла?

Рейтинг: 0Ответов: 1Опубликовано: 03.08.2023
    @staticmethod
    def pdownload(url: str, out: str):
        """Download file from URL with progress."""
        response = get(url, stream=True)

        current_progress = 0

        total = int(response.headers.get('content-length', 0))

        size = _convsize(total, PyLoader.CHUNK)

        with open(out, 'wb') as out_file:
            for data in response.iter_content(chunk_size=PyLoader.CHUNK):
                size_written = out_file.write(data)

                current_progress += size_written

                yield {
                    'percentage': _percentage(current_progress, total),
                    'current_progress': current_progress,
                    'size_written': size_written,
                    'size': size,
                    'totalbytes': total,
                    'chunk': PyLoader.CHUNK # 1024
                }
file = PyLoader.pdownload('https://cdn.sstatic.net/Img/teams/teams-illo-free-sidebar-promo.svg?v=47faa659a05e', 'sidebar.svg')

for data in file:
    print(data)

При запуске этого кода, percentage уже с самого начала больше 100%, а если посмотреть на size_written то он уже больше чем весь размер файла (size_written: 2415 > totalbytes: 2368), как решить проблему? может я как то не так считаю size_written?

Ответы

▲ 0

Оказывается response.headers.get возвращает неправильный content-length. Значениеtotal заменено на int(urlopen(url).info()['Content-Length']) и все заработало.