【问题标题】:file does not have buffer interface文件没有缓冲区接口
【发布时间】:2015-01-30 09:49:45
【问题描述】:

我的views.py中有一个函数。是这样的

from django.core.files.uploadedfile import SimpleUploadedFile
def get_file(self, url):
    # pdb.set_trace()
    result = urllib.urlretrieve(url)
    fi = open(result[0])
    fi_name = os.path.basename(url)
    suf = SimpleUploadedFile(fi_name, fi)
    return suf

在创建 SimpleUploadedFile 对象时出现错误提示

TypeError: file doesnot have buffer interface

我尝试将打开模式更改为“rb”。但仍然得到同样的错误 请帮帮我

【问题讨论】:

    标签: python django


    【解决方案1】:

    SimpleUploadedFile 需要实际的文件内容,而不是文件对象。所以你可以像这样修复你的代码:

    suf = SimpleUploadedFile(fi_name, fi.read())
    

    我必须说,虽然我不知道您为什么使用 urlretrieve,它将内容保存到本地临时文件,然后您必须打开并阅读该文件。最好使用urlopen,直接传递:

    result = urllib.urlopen(url)
    fi_name = os.path.basename(url)
    suf = SimpleUploadedFile(fi_name, result.read())
    

    【讨论】:

      【解决方案2】:

      在请求库中的可怕 El Capitan 上遇到了这个问题。 在套接字层上转换为 memoryview() 时,似乎将 unicode 作为 HTTP 内容传递会破坏内容。 只需将所有内容作为纯字符串传递即可为我修复它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多