Загрузка ИЗОБРАЖЕНИЯ в DRF, поле изображения не может быть сериализовано при введении метода контрольной суммы - PullRequest
0 голосов
/ 16 апреля 2020

У меня проблема при попытке загрузить изображение в DRF. Все отлично работает со следующим кодом.

class UploadPhotoViewset(
    generics.CreateAPIView
):
    queryset = Photo.objects.all()
    parser_classes = (JSONParser, MultiPartParser, FormParser, FileUploadParser)
    serializer_class = PhotoSerializer

    def post(self, request, *args, **kwargs):
        print(request.data)
        img_file = request.data["image"]
        request.data["size"] = img_file.size
        request.data["title"] =  img_file.name
        # request.data["checksum"] = self.get_file_md5(img_file)
        request.data["image"] = img_file
        print(request.data)
        return self.create(request, *args, **kwargs)

Но когда я попытался сгенерировать md5 ha sh для файла. Странные вещи случаются.

class UploadPhotoViewset(
    generics.CreateAPIView
):
    queryset = Photo.objects.all()
    parser_classes = (JSONParser, MultiPartParser, FormParser, FileUploadParser)
    serializer_class = PhotoSerializer

    def post(self, request, *args, **kwargs):
        print(request.data)
        img_file = request.data["image"]
        request.data["size"] = img_file.size
        request.data["title"] =  img_file.name
        # request.data["checksum"] = self.get_file_md5(img_file)
        request.data["image"] = img_file
        print(request.data)
        return self.create(request, *args, **kwargs)

    def get_file_md5(self, img):
        hash_md5 = hashlib.md5()        
        for chunk in iter(lambda: img.read(4096), b""):
            hash_md5.update(chunk)
        return hash_md5.hexdigest()

Данные не могут быть проверены.

serializer.is_valid(raise_exception=True)

даст

{
    "errors": {
        "image": [
            "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
        ]
    }
}

Кто-нибудь знает почему?

...