web-dev-qa-db-fra.com

"Données Post Image utilisant POSTMAN"

J'essaie de POST des données sur mon API. J'ai un modèle avec un champ image où:

image = models.ImageField()

J'ai une image sur ma boîte locale, que j'essaye d'envoyer. Est-ce que je l'envoie correctement?

{
   "id": "3", 
   "uid":"273a0d69",
   "uuid": "90",
   "image": "@/home/user/Downloads/tt.jpeg"
}
19
User_Targaryen

Ce n'est pas comme ça que vous envoyez un fichier sur postier. Ce que vous avez fait, c'est envoyer une chaîne qui est le chemin de votre image, rien de plus.

Ce que vous devriez faire est

  1. Après avoir défini la méthode de requête sur POST, cliquez sur l'onglet "Corps".
  2. Sélectionnez les données de formulaire. À la première ligne, vous verrez des zones de texte nommées clé et valeur. Écrivez "image" sur la clé. Vous verrez le type de valeur qui est défini sur 'texte' par défaut. Make it File et uploadez votre fichier.
  3. Ensuite, sélectionnez 'raw' et collez votre fichier json. De plus, juste à côté du choix binaire, vous verrez que le texte est cliqué. Faites-en JSON.

form-data section

raw section

Vous êtes prêt à partir.

Dans votre vue Django,

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()
46
Çağatay Barın

La réponse acceptée fonctionne si vous définissez le code JSON comme paire clé/valeur dans le fichier form-data panneau (voir l'image ci-dessous)

enter image description here

Néanmoins, je me demande s’il s’agit d’un moyen très simple de concevoir une API. S'il est obligatoire de télécharger à la fois l'image et le JSON en un seul appel, c'est peut-être acceptable, mais si vous pouviez séparer les routes (une pour le téléchargement d'image, l'autre pour le corps JSON avec un en-tête de type de contenu approprié), cela semble mieux .

8
MarAja