Encode Base64 Django ImageField Stream

Recibo una imagen a través de mi formulario, que no quiero guardar como de costumbre en un FileField sino en un CharField como Base64. Esta es mi configuración actual:

modelos.py

 class Image(models.Model): company = models.ForeignKey(Company) img = models.TextField() img_id = models.CharField(blank=True, null=True, max_length=64) img_class = models.CharField(blank=True, null=True, max_length=64) created = models.DateField(auto_now_add=True, editable=False) 

forms.py

 class ImageForm(forms.Form): img = forms.ImageField() img_id = forms.CharField(required=False) img_class = forms.CharField(required=False) 

vistas.py

 class ImageUploadView(LoginRequiredMixin, FormView): form_class = ImageForm template_name = "upload.html" success_url = reverse_lazy("home") def form_valid(self, form): account = Account.objects.get(user=self.request.user) html = Html.objects.get(company=account.company) if self.request.user.is_authenticated(): company = Company.objects.get(account=account) form_img = form.cleaned_data['img'] print(form_img.__dict__.keys()) print(form_img.image) return super(ImageUploadView, self).form_valid(form) 

La salida de print(form_img.__dict__.keys()) es

 ['file', 'content_type_extra', 'image', 'charset', '_name', 'content_type', '_size', 'field_name'] 

y la salida de print(form_img.image) para una imagen Png es:

  

y para un JPG es:

  

¿Es posible codificar la imagen recibida como base64 y guardarla en la base de datos desde la transmisión y guardarla temporalmente en algún lugar?

Edit: lo tengo funcionando ahora!

 b64_img = base64.b64encode(form_img.file.read()) 

¡Eso fue básicamente todo!

Sí, es posible hacerlo fácilmente con PIL!

Cómo :

Guarde la imagen en el búfer y codifíquelo en base64.

 import base64 import cStringIO img_buffer = cStringIO.StringIO() image.save(img_buffer, format="imageFormatYouWant") img_str = base64.b64encode(img_buffer.getvalue()) 

O

 with open("yourImage.ext", "rb") as image_file: encoded_string = base64.b64encode(image_file.read())