@NyxDeveloper

Как правильно отдать zipfile в ответе django?

Делаю раздел с файлами в приложении. При нажатии на кнопку "Скачать все" должен записываться архив со всеми файлами вложенными в нужную папку. Путь до папки получил, файлы в архив записал, осталось отдать файл на скачивание в FileResponse.
Тут две проблемы:
1) Если отдавать файл как переменную, вылетает эта ошибка - A server error occurred. Please contact the administrator. Хотя по одиночке файлы отправляются.
2) Архив, почему-то всегда сохраняется в корневой папке django, хотя я пробовал всячески менять пути. По хорошему нужно сделать так, чтобы он появлялся в папке media.

Я только недавно столкнулся с файлами в вебе и не имею почти никакого понятия как отправлять их в ответе. Помогите кто-нибудь добрым советом или документацией, пожалуйста!

views.py
def DownloadAllFilesView(request, objId):
    if request.method == 'POST':
        project_folder = Doc.objects.filter(idProj=Project.objects.get(id=objId)).first().idProj.name.replace(' ', '_')
        path = settings.MEDIA_ROOT + '/project_%s/' % project_folder
        z_name = '%s.zip' % Project.objects.get(id=objId).name.replace(' ', '_')

        z = zipfile.ZipFile(z_name, 'w')  # Создание нового архива

        for root, dirs, files in os.walk(path):  # Список всех файлов и папок в директории folder
            for file in files:
                z.write(os.path.join(root, file))  # Создание относительных путей и запись файлов в архив

        z.close()

        return FileResponse(z)
  • Вопрос задан
  • 42 просмотра
Решения вопроса 1
@bacon
почему бы тебе не выполнить так же как и в доках https://docs.djangoproject.com/en/3.1/ref/request-...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы