【问题标题】:Attribute error: 'str' object has no attribute 'read' python-django属性错误:'str' 对象没有属性'read' python-django
【发布时间】:2019-01-25 02:28:34
【问题描述】:

所以这里的场景是,我有一个端点,它将获取一个 zip 文件,将其解压缩并暂时保存到媒体目录。这是完整的代码

def get_filenames(path_for_zip):
    with ZipFile(path_for_zip, 'r') as zip:
        return zip.namelist()


class Upload(View):
    def post(self, request):

        context = {}

        upload_file = request.FILES['document']
        unzip_file = get_filenames(upload_file)
        for files in unzip_file:
            print(files)
            fs = FileSystemStorage()
            fs.save('read.jpg', files)




        return render (request, 'toDo_app.html', context)

如您所见,我正在使用FileSystemStorageZipFile 正在正确解压缩,我可以在 print(files) 中看到它,但问题出在 FileSystemStorage 我猜,它没有被保存,我收到此错误:

attribute error 'str' object has no attribute 'read'. 

请指出我做错了什么以及应该如何解决。谢谢你。

【问题讨论】:

    标签: python django django-rest-framework zipfile file-system-storage


    【解决方案1】:

    @zeed namelist 返回列表中文件的名称,即 zip 中的字符串。上传时读取/打开文件到缓冲区并上传

    for files in unzip_file:
        print(files)
        fs = FileSystemStorage()
        with open(files, "rb") as outstream:
            fs.save('read.jpg', outstream)
    

    【讨论】:

    • so namelist 基本上是一个字符串。所以它不会解压缩并遍历文件它只是给你文件的名称!
    • 我想我得到了另一个错误,因为它是字符串,它并没有真正在我上传的文件中找到文件。我收到文件未找到错误。有什么方法可以不获取名称,而是获取 zip.namelist 之类的文件
    猜你喜欢
    • 2020-09-28
    • 2013-10-28
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 2016-04-07
    相关资源
    最近更新 更多