0

私は現在、モバイルアプリのユーザが画像をDjango Serverにアップロードするプロジェクトを進めています。media_rootからDjango Restシリアライザへ画像を保存

クラスImageDetailsViewSet(APIView):

def post(self,request, *args, **kwargs): 
     try: 
      ######### Accept string from the user 
      imgStr = request.data['image'] 

      media_filename = os.path.join(settings.MEDIA_ROOT, 'img.jpg') 

      ######## Create decoded string to a JPEG file and save it to media_root 
      img = Image.open(StringIO(imgStr.decode('base64'))) 
      img.save(media_filename, 'JPEG') 

      ###### Update request data to include the newly created image to the request 
      user = request.user.get_username() 
      data1 = {'image': media_filename, 'category': 1, 'status': 'Y', 'user': user} 

      serializer = ImageDetailsSerializer(data=data1) 
      if serializer.is_valid(): 
       serializer.save() 
       return Response(serializer.data, status=status.HTTP_201_CREATED) 
      return Response(serializer.data, status=status.HTTP_400_BAD_REQUEST) 
     except: 
      raise 
      return Response(serializer.errors, status=status.HTTP_415_BAD_REQUEST) 

マイImageDetailsS​​erializer:

class ImageDetailsSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = ImageDetails 
     fields= ('image','status','category', 'user') 

コードここ

は、ユーザからのPOSTリクエストを提供しています私の見解でありますシリアライザがvaではないことを意味するHTTP 400エラーを常に返します蓋。

は、ここで私は適用しようとしたが、この場合には動作しませんソリューションです:

  1. 変更IMGへdata1 = {'image': media_filename, 'category': 1, 'status': 'Y', 'user': user}からmedia_filenameそれはTypeError: <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=2976x3968 at 0x841D2F0> is not JSON serializableエラー

  2. media_url/img.jpgにmedia_filenameを交換して返し、同じエラーを返します。

  3. シリアライザで更新画像フィールドは、(下記のコードを参照)を追加することによって、それがすべてで任意の改善を行う行います

    class ImageDetailsSerializer(serializers.ModelSerializer): 
         image = serializers.ImageField(use_url=True) 
         class Meta: 
          model = ImageDetails 
          fields= ('image','status','category', 'user') 
    

私の質問は以下のとおりです。

  1. どうすべきシリアライザのImageFieldに格納されますか?イメージ、イメージURL、またはイメージのディレクトリが格納されていますか?

  2. これはリモートユーザーからのデータを保存する正しい方法ですか、テクニックですか?あるいはこれを実装する他の効果的な方法がありますか?

答えて

0
  1. それはMEDIA_ROOTからの相対パスが
  2. あなたはrequest.dataのコピーにdata1を変更し、この問題への答えは
+0

私は 'request.data ['image'] = media_filename'を追加することで、request.data自体を編集しようとしました。 ' request.data ['category'] = 1' 'request.data ['status'] = 'Y'' '私は' serializer = ImageDetailsS​​erializer(data = request.data) 'へのリクエストを更新しましたが、私はまだ400エラーがあります(シリアライザは有効ではありません)。 – jonilyn2730

+0

私はあなたがリクエストからポストパラメータに 'イメージ'ステータス 'カテゴリ' 'ユーザー'を追加できると思います。動作しない場合は、検証エラーの詳細を出力できます。 – Guinner

関連する問題