文件没有缓冲区接口

时间:2015-01-30 09:49:45

标签: python django

我在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'。但仍然得到同样的错误 Plz帮帮我

2 个答案:

答案 0 :(得分:5)

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())

答案 1 :(得分:-1)

在可怕的El Capitan上有这个问题,请求lib。 似乎将unicode作为HTTP内容传递在转换为套接字层上的memoryview()时会破坏内容。 只需将所有内容作为普通字符串传递给我即可。