Reputation: 4225
I am trying to POST data to my API. I have a model with an image
field where:
image = models.ImageField()
I have an image on my local box, which I am trying to send. Am I sending it correctly?
{
"id": "3",
"uid":"273a0d69",
"uuid": "90",
"image": "@/home/user/Downloads/tt.jpeg"
}
Upvotes: 94
Views: 252855
Reputation: 3496
That's not how you send file on postman. What you did is sending a string which is the path of your image, nothing more.
What you should do is:
You're ready to go.
In your Django view,
from rest_framework.views import APIView
from rest_framework.parsers import MultiPartParser
from rest_framework.decorators import parser_classes
@parser_classes((MultiPartParser, ))
class UploadFileAndJson(APIView):
def post(self, request, format=None):
thumbnail = request.FILES["file"]
info = json.loads(request.data['info'])
...
return HttpResponse()
Upvotes: 187
Reputation: 4064
It can be done in three ways
1. Go to Body > Form-data > Select Files in the column
2. Go to Body > binary > Select File
3. Encode image to base64 string and pass it through postman Body > raw > JSON like mentioned in the attached screenshots
Then on the server-side, you can decode it that way
import base64
decode = base64.b64decode(data)
from django.core.files.base import ContentFile
file = ContentFile(decode, name=name)
Note: You could encode the file to base64 through that link and send it in the curl.
https://base64.guru/converter/encode/file
Upvotes: 16
Reputation: 889
You can upload your image from the binary tab if the endpoint is expecting just an image (not a key-value pair).
Upvotes: 1
Reputation: 711
Now you can hover the key input and select "file", which will give you a file selector in the value column:
Upvotes: 38
Reputation: 497
Follow the below steps:
Select body > form-data and do same as shown in the image.
Now in your Django view.py
def post(self, request, *args, **kwargs): image = request.FILES["image"] data = json.loads(request.data['data']) ... return Response(...)
Upvotes: 2
Reputation: 1597
The accepted answer works if you set the JSON as a key/value pair in the form-data
panel (See the image hereunder)
Nevertheless, I am wondering if it is a very clean way to design an API. If it is mandatory for you to upload both image and JSON in a single call maybe it is ok but if you could separate the routes (one for image uploading, the other for JSON body with a proper content-type header), it seems better.
Upvotes: 17