2017-09-27 3 views
0

J'essaye de télécharger l'image vers le système de fichiers en utilisant python django. Je n'ai aucune idée sur la façon d'aller plus loin.Django enregistre la chaîne base64 dans le système de fichiers en utilisant models.ImageField

dans mon model.py:

Class Test(object): 
    mission = models.TextField(blank=True) 
    image = models.ImageField(upload_to='documents/images/',blank=True) 
    account = models.OneToOneField(Account, related_name='account') 

dans mon view.py

def add_image(request, account): 
    req = get_request_json(request) 
    data = Test.objects.add_image(account, req) 

dans mon manager.py

Class TestManager(models.Manager): 
    def add_image(self, account, input): 
     acc = self.get(account=account) 
     acc.save() 

     return acc; 

Mais je ne suis pas sûr de savoir comment procéder à partir ici.

Je voudrais savoir comment enregistrer la chaîne d'image base64 à l'emplacement spécifié et stocker le chemin/nom de fichier dans la base de données?

J'ai travaillé avec python où j'écris les fichiers dans un répertoire et obtient le chemin d'accès et le stocke en db. Ici, je veux utiliser les options de django.

Je dois répéter le même processus avec d'autres formats de fichiers.

Répondre

0

Si vous avez une image au format de chaîne base64 et que vous voulez le sauvegarder dans un ImageField modèles, c'est ce que je ferais

import base64 

image_b64 = request.POST.get('image') # This is your base64 string image 
format, imgstr = image_b64.split(';base64,') 
ext = format.split('/')[-1] 
data = ContentFile(base64.b64decode(imgstr), name='temp.' + ext) 

Maintenant, vous pouvez simplement faire

Test.objects.create(image=data) 
+0

I J'obtiens cette erreur 'l'argument de chaîne devrait contenir seulement des caractères ASCII' dans cette ligne' data = ContentFile (base64.b64decode (imgstr), nom = 'temp.' + ext) ' –

+0

si enlevé' base64.b64decode' et using 'data = ContentFile (imgstr, nom = 'temp.' + Ext) 'cette erreur se produit' n'est pas sérielle JSON e' –