2009-03-15 7 views
7

Sto utilizzando PyAMF per trasferire un'immagine grande generata dinamicamente da Flex a Django. Sul lato Django ricevo i dati encodedb64 come parametro:Gestione file in Django durante la registrazione di immagini dalla chiamata di servizio

Il mio modello di articolo come un campo immagine. Quello che ho difficoltà a fare è salvare i dati come File Django Field.

def save_item(request, uname, data): 
    """ Save a new item """  
    item = Item() 

    img = cStringIO.StringIO() 
    img.write(base64.b64decode(data)) 
    myFile = File(img) 

    item.preview.save('fakename.jpg', myFile, save=False) 

Che non avrebbe funzionato perché il mio oggetto File da StringIO manca alcune proprietà come la modalità, nome, ecc

Penso anche che l'utilizzo StringIO caricherà i dati delle immagini completamente in memoria, che è male in modo che io può semplicemente rinunciare alla AMF per questo caso particolare e usare POST.

Cosa ne pensi?

risposta

9

In django.core.files.base è possibile trovare la classe ContentFile. Questa classe estende la classe base Django File, quindi non è necessario StringIO (che ContentFile utilizza internamente). Il metodo di salvataggio modificato è simile al seguente:

from django.core.files.base import ContentFile 
def save_item(request, uname, data): 
    item = Item() 
    myFile = ContentFile(base64.b64decode(data)) 
    item.preview.save('fakename.jpg', myFile, save=False) 
Problemi correlati