Запуск веб -приложения Python Python, который застегивает ряд файлов и обслуживает их пользователю на основе фильтров пользователя. Файлы и создание молнии начинаются, но это может занять минуты. Пользователь не узнает, повешен ли он. работает над этим. Проблема с этим заключается в том, чтобы использовать раздел загрузки браузера (маленькое всплывающее окно или страница загрузки с панелями прогресса), вам необходимо предоставить заголовок длины содержимого, но мы не знаем размер файла ZIP, потому что он, потому Он еще не закончил создавать. Я старался изо всех сил, чтобы оценить размер файла ZIP после его завершения, и я подумал, что это было бы легко, так как мой Zip просто Zip_Stored, но есть внутренняя структура Zip, которую я не могу точно измерить. Браузер просто в конечном итоге отвергает загрузку с помощью ERR_Content_length_mismatch. Отдельный /маршрут прогресса, но у меня действительно было сердце, используя раздел загрузки браузеров, и на данный момент это точка гордости. Я также мог бы просто не транслировать его, а затем, поскольку он создается, используйте SSE для предоставления обновлений на ZIP, затем, как только он закончен, отправьте его с заголовком длины содержимого ... не так хорошо, как я хотел бы, чтобы это было хотя . < /p>
def calculate_total_size(filenames):
total_size = 0
for file in filenames:
matching_filepath, _ = get_file_info(file)
if matching_filepath:
total_size += os.path.getsize(matching_filepath)
# Add overhead for ZIP file structure (22 bytes per file + 22 bytes for the central directory)
total_size += 22 * (len(filenames) + 1)
return total_size
def generate_file_entries(filenames):
for file in filenames:
matching_filepath, filename = get_file_info(file)
if matching_filepath:
file_stat = os.stat(matching_filepath)
modified_at = datetime.utcfromtimestamp(file_stat.st_mtime)
with open(matching_filepath, 'rb') as f:
chunk = f.read()
if isinstance(chunk, bytes): # Ensure only bytes are yielded
yield filename, modified_at, 0o600, ZIP_64, [chunk]
else:
print(f"Unexpected data type for file contents: {type(chunk)}")
Подробнее здесь: https://stackoverflow.com/questions/794 ... ion-but-th