Ошибка: Требуется байтоподобный объект, а не 'list'

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

У меня такая ошибка: требуется байтоподобный объект, а не 'list', потому что я пытался использовать BytesIo. без него ошибка говорит:" fpin.seek(0, 2) AttributeError: у объекта 'list' нет атрибута 'seek'"

Мой код выглядит следующим образом

files = request.FILES.getlist('document[]')
with zipfile.ZipFile(io.BytesIO(files), "r")as archive:
    for zippedFileName in archive.namelist():
        with archive.open(zippedFileName) as myfile:
            with io.BytesIO() as buf:
                buf.write(myfile.read())
                buf.seek(0)                                   
                file = File(buf, zippedFileName).decode('utf-8')
                rbe = UploadedFile.objects.create(document=file)                                 
                rbe.user= request.user
                rbe.save()                                   
                return render(request, 'uploader/index.html', {'files': files})

В Django, request.FILES.getlist возвращает список UploadedFile объектов, каждый из которых имеет file атрибут, файлоподобный объект, который вы можете передать непосредственно в ZipFile конструктор.

Поскольку ваш код, очевидно, предполагает, что в списке, возвращаемом UploadedFile, есть только один объект request.FILES.getlist, вы можете распаковать его следующим образом:

uploaded_file, = request.FILES.getlist('document[]')
with zipfile.ZipFile(uploaded_file.file, "r") as archive:
    ...
Вернуться на верх