как сжать загруженные файлы в django с помощью метода 7zip subprocess.call? - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь сжать загруженные файлы в django с помощью 7zip.

Я успешно реализовал сжатие и распаковку файлов с помощью 7zip в python, но я не могу понять, как интегрировать то же самое с загруженным файлом django, так что всякий раз, когда файл загружается, формат 7zp для того же файла создается и сохраняется на диске.

Код, используемый в python для сжатия:

import subprocess
from py7zr import unpack_7zarchive
import shutil

exe = r"C:\Program Files\7-Zip\7zG.exe"
source = r"C:\profiles\Living in the Light_ A guide to personal transformation.pdf"
target = r"C:\profiles\Living1.7z"

def compress(source,traget):
    subprocess.call(exe + " a -t7z \"" + target + "\" \"" + source + "\" -mx=9")
    print('file compressed')

def uncompress(target):
    shutil.register_unpack_format('7zip', ['.7z'], unpack_7zarchive)
    shutil.unpack_archive(target, r'C:\Users\098an\Pictures\Camera Roll')
    print('file uncompressed')

1 Ответ

1 голос
/ 14 июля 2020

Я считаю, что есть инструменты Django -specifi c, которые вы должны использовать, кроме 7-zip. Одна из проблем с использованием 7-zip в Интернете заключается в том, что, если на клиентском компьютере он не установлен, ваш сервер не будет работать правильно.

Я знаю два способа решить эту проблему: если вы просто Если вы хотите сжать изображения, вы можете обратиться к этой статье разработчика о сжатии изображений. Другой способ решить эту проблему - потребовать от пользователей загрузки в виде zip-файлов, как описано здесь , но изменить расширения файлов на .zip, .rar или любые другие, которые вы сочтете необходимыми

РЕДАКТИРОВАТЬ

Есть способы автоматически заархивировать все типы файлов, такие как этот пакет pypi , но я не уверен, как это сработает. это не основной пакет. Если вы хотите сэкономить место для загрузки, попробуйте установить ограничение размера .

...