Делаю раздел с файлами в приложении. При нажатии на кнопку "Скачать все" должен записываться архив со всеми файлами вложенными в нужную папку. Путь до папки получил, файлы в архив записал, осталось отдать файл на скачивание в 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)