Сохранение содержимого zip-файла в django
Добрый день,
Я хочу сохранить содержимое zip файла. Мой код работает, но сохраняется только имя файла, а не содержимое или реальные файлы ни в базе данных, ни в проекте.
Мне нужно сохранить в базе данных содержимое каждого файла. Может ли кто-нибудь помочь мне исправить мою ошибку? Мой код выглядит следующим образом:
uploaded_file, = request.FILES.getlist('document[]')
with zipfile.ZipFile(uploaded_file.file, mode="r") as archive:
for zippedFileName in archive.namelist():
newZipFile = UploadedFile(document= zippedFileName)
newZipFile.user= request.user
files = newZipFile.save()
success=True
return render(request, 'uploader/index.html', {'files': [uploaded_file]})
Django не предлагает BlobField для моделей. Вы должны сохранить ваш zip-файл на вашем файловом хранилище: https://docs.djangoproject.com/fr/4.1/ref/files/storage/
Или вы можете использовать BinaryField в ваших моделях и попытаться сохранить ваш zip-файл как закодированный двоичный файл: https://docs.djangoproject.com/fr/4.1/ref/models/fields/#binaryfield
Лучший способ - это использование FS, я думаю
Для тех, кто ищет, как сохранить содержимое zip-файла, это решение работает для меня
IMAGE_FILE_TYPES = ['png', 'jpg', 'jpeg']
def PostCreate(request):
form = PostForm()
if request.method == 'POST':
form = PostForm(request.POST, request.FILES)
if form.is_valid():
user_pr = form.save(commit=False)
user_pr.album_image = request.FILES['album_image']
with zipfile.ZipFile(user_pr.album_image, mode="r") as archive:
for fileName in archive.namelist():
file_type = fileName.split('.')[-1]
file_type = file_type.lower()
if file_type not in IMAGE_FILE_TYPES:
print("ERROR!!!")
else:
file= archive.extract(fileName, settings.MEDIA_ROOT + 'UnzippedFiles')
rbe = Post.objects.create(album_image=file)
rbe.save()
print("SUCESS!!!")
return render(request, 'photos/post.html', {'user_pr': user_pr})
context = {"form": form,}
return render(request, 'photos/post_form.html', context)