我在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帮帮我
答案 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()时会破坏内容。 只需将所有内容作为普通字符串传递给我即可。