Сохранение содержимого 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)
Вернуться на верх