2010-01-03 12 views
7

He revisado varios hilos más pero sigo teniendo problemas. Tengo un modelo que incluye un FileField y estoy generando instancias semialeatorias para diversos fines. Sin embargo, estoy teniendo un problema al subir los archivos.Carga de archivos mediante programación en Django

Cuando creo un nuevo archivo, parece que funciona (la nueva instancia se guarda en la base de datos), se crea un archivo en el directorio apropiado, pero el contenido del archivo falta o está dañado.

Este es el código correspondiente:

class UploadedFile(models.Model): 
    document = models.FileField(upload_to=PATH) 


from django.core.files import File 

doc = UploadedFile() 
with open(filepath, 'wb+') as doc_file: 
    doc.documen.save(filename, File(doc_file), save=True) 
doc.save() 

Gracias!

Respuesta

17

Podría ser tan simple como la apertura del archivo. Desde que abrió el archivo en 'wb +' (escribir, binario, adjuntar), el manejador está al final del archivo. intente:

class UploadedFile(models.Model): 
    document = models.FileField(upload_to=PATH) 


from django.core.files import File 

doc = UploadedFile() 
with open(filepath, 'rb') as doc_file: 
    doc.document.save(filename, File(doc_file), save=True) 
doc.save() 

Ahora está abierto al principio del archivo.

+0

¡Guau, gracias! ¡Buena atrapada! – SapphireSun

+2

una conjetura suertuda;) ... Nunca he tenido la necesidad de subir archivos programáticamente, pero esto fue lo único que pude ver que parecía sospechoso. – JudoWill

+1

¿por qué se guarda un modelo completo? ¿No es redundante (llamado anteriormente por 'doc.document.save()' con 'save = True') – Jerzyk

Cuestiones relacionadas