archivo no tiene interfaz de búfer

Tengo una función en mi views.py. Es así

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 

Al crear el objeto SimpleUploadedFile, aparece el error que dice

 TypeError: file doesnot have buffer interface 

Intenté cambiar el modo abierto a ‘rb’. Pero sigo teniendo el mismo error. Por favor, ayúdame.

SimpleUploadedFile necesita el contenido del archivo real, en lugar de un objeto de archivo. Así que podrías arreglar tu código de esta manera:

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

Debo decir que no sé por qué está utilizando urlretrieve, que guarda el contenido en un archivo temporal local que debe abrir y leer. Mejor usar urlopen y pasarlo directamente:

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

Tenía este problema en el temido El Capitán, en las solicitudes lib. Parece que pasar unicode como contenido HTTP rompe cosas cuando se convierte a memoryview () en la capa de socket. Solo pasando todo como me lo arreglaban las cuerdas.