from rest_framework import routers, serializers, viewsets
import base64
from .models import upload
import zipfile
import os 



class Base64ImageField(serializers.ImageField):
    """
    A Django REST framework field for handling image-uploads through raw post 
data.
    It uses base64 for encoding and decoding the contents of the file.

    Heavily based on
    https://github.com/tomchristie/django-rest-framework/pull/1268

    Updated for Django REST framework 3.
    """

    def to_internal_value(self, data):
        from django.core.files.base import ContentFile
        import base64
        import six
        import uuid

        # Check if this is a base64 string
        if isinstance(data, six.string_types):
            # Check if the base64 string is in the "data:" format
            if 'data:' in data and ';base64,' in data:
                # Break out the header from the base64 content
                header, data = data.split(';base64,')

            # Try to decode the file. Return validation error if it fails.
            try:
                decoded_file = base64.b64decode(data)
            except TypeError:
                self.fail('invalid_image')

            # Generate file name:
            file_name = str(uuid.uuid4())[:12] 
# 12 characters are more than enough.
            # Get the file name extension:
            file_extension = self
.get_file_extension(file_name, decoded_file)

            complete_file_name = "%s.%s" % (file_name, file_extension, )

            data = ContentFile(decoded_file, name=complete_file_name)

        return super(Base64ImageField, self).to_internal_value(data)

    def get_file_extension(self, file_name, decoded_file):
        import imghdr

        extension = imghdr.what(file_name, decoded_file)
        extension = "zip" if extension == "jpeg" else extension #<--error 
line---> i am converting Base 64 data into zip file

        
#examplezip.write(serializers.ImageField,compress_type = zipfile.ZIP_DEFLATED)
        #examplezip.close()

        return extension

 
   


class uploadSerializers(serializers.ModelSerializer):
    
    image=Base64ImageField(
       max_length=None, use_url=True,
       )
   
    #image =  serializers.ImageField(max_length=None,use_url=True)
    class Meta:
        model = upload
        fields = ('id','image','user')
        extra_kwargs = {'user': {'required': False}}







On Thursday, April 30, 2020 at 2:05:25 PM UTC+5:30, yashwanth balanagu 
wrote:
>
> {"image":["File extension “zip” is not allowed. Allowed extensions are: 
> bmp, dib, gif, tif, tiff, jfif, jpe, jpg, jpeg, pbm, pgm, ppm, pnm, png, 
> apng, blp, bufr, cur, pcx, dcx, dds, ps, eps, fit, fits, fli, flc, ftc, 
> ftu, gbr, grib, h5, hdf, jp2, j2k, jpc, jpf, jpx, j2c, icns, ico, im, iim, 
> mpg, mpeg, mpo, msp, palm, pcd, pdf, pxr, psd, bw, rgb, rgba, sgi, ras, 
> tga, icb, vda, vst, webp, wmf, emf, xbm, xpm."]}
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/f64709cf-3452-4658-9903-599c75e247c9%40googlegroups.com.

Reply via email to