emilector
emilector

Reputation: 35

Error: Invalid data. Expected a dictionary, but got InMemoryUploadedFile

I am getting the above error when trying to upload multiple pictures from react to django rest api. This is my django view code:

def post(self, request, *args, **kwargs):
    posts_serializer = PostSerializer(data=request.FILES.getlist('image[]'), many=True)
    print(posts_serializer)

    if posts_serializer.is_valid():
        posts_serializer.save()
        return Response(posts_serializer.data, status=status.HTTP_201_CREATED)
    else:
        print('error', posts_serializer.errors)
        return Response(posts_serializer.errors, status=status.HTTP_400_BAD_REQUEST)

This is a print from posts_serializer:

PostSerializer(data=[<InMemoryUploadedFile: 1PSM Logo.png (image/png)>, <InMemoryUploadedFile: Microsoft-Azure-Fundamentals.png (image/png)>, <InMemoryUploadedFile: DP-900_ProductImage-1.png (image/png)>], many=True):
            id = IntegerField(label='ID', read_only=True)
            image = ImageField(max_length=100)

Appreciate any help.

Upvotes: 0

Views: 809

Answers (1)

emilector
emilector

Reputation: 35

So I finally made it work by using a different way:

def post(self, request, *args, **kwargs):
    if request.method == "POST":
        allimages = request.FILES.getlist('images')
        for oneimage in allimages:
            Post.objects.create(images=oneimage)
        return Response(status=status.HTTP_201_CREATED)
    return Response(status=status.HTTP_400_BAD_REQUEST)

class Post(models.Model):
images = models.FileField(upload_to='post_images', default='')

Upvotes: 1

Related Questions