2017-03-06 1 views
1

Django Rest Framework 및 Android Studio를 사용하여 사진을 업로드하려고하는데이 이미지를 검색하려고 할 때 항상 null이됩니다.Django Rest Framework를 사용하여 사진 업로드

Models.py :

class FotoCliente(models.Model): 
image = models.ImageField(upload_to='userpic/%Y/%m/%d/', null = true, max_length = 255) 

Serializer.py

class FotoClienteSerializer(serializers.HyperlinkedModelSerializer): 
    #id_cliente_cliente = ClienteSerializer() 
    class Meta: 
     model = FotoCliente 
     fields = ('id','image','url') 

Views.py

class PhotoList(APIView): 

def get(self, request, format = None): 
    photo = FotoCliente.objects.all() 
    serializer = FotoClienteSerializer(photo, many = True) 
    return Response(data= serializer.data, status = status.HTTP_200_OK) 

def post(self, request, format = None): 
    serializer = FotoClienteSerializer(data=request.data, context={'request':request}) 
    if serializer.is_valid(): 
     serializer.save() 
     return Response(serializer.data, status = status.HTTP_201_CREATED) 
    return Response(serializer.errors, status = status.HTTP_400_BAD_REQUEST) 

class PhotoDetail(APIView): 

def get_object(self, pk): 
    try: 
     return FotoCliente.objects.get(pk=pk) 
    except: 
     return Http404 

def get(self, request, pk,format=None): 
    photo = self.get_object(pk) 
    serializer = FotoClienteSerializer(photo,context={'request':request}) 
    return Response(data=serializer.data, status = status.HTTP_200_OK) 

def post(self, request, format = None): 
    serializer = FotoClienteSerializer(data=request.data, files = request.FILES) 
    if serializer.is_valid(): 
     serializer.save() 
     return Response(serializer.data, status = status.HTTP_201_CREATED) 
    else: 
     return Response(serializer.errors, status = status.HTTP_400_BAD_REQUEST) 

def delete(self, request, pk, format= None): 
    photo = self.get_object(pk) 
    photo.delete() 
    return Response(status=status.HTTP_204_NO_CONTENT) 

def put (self, request, pk, format= None): 
    photo = self.get_object(pk) 
    serializer = FotoClienteSerializer(photo, data= request.data) 
    if serializer.is_valid(): 
     serializer.save() 
     return Response(serializer.data) 
    return Response(serializer.errors, status = status.status.HTTP_400_BAD_REQUEST) 

Urls.py

url(r'^api/fotos/$', views.PhotoList.as_view(), name ='fotocliente-list'), 
url(r'api/fotos/(?P<pk>[0-9]+)/$', views.PhotoDetail.as_view(), name = 'fotocliente-detail'), 

결과 :

{ "ID": 7, "이미지"널 (null), "URL": "http://127.0.0.1:8080/api/fotos/7/"}

안드로이드

사진을 업로드하기 위해 Android 용 이온 쿠우스 라이브러리를 사용하고 있습니다.

Ion.with(editClientActivity.this) 
     .load("POST", url) //url de query 
     .setHeader("Cache-Control", "No-Cache")//desabilitando cache denovo porque essa parada é bug 
     .setHeader("Authorization", getIntent().getExtras().getString("token"))//token de acesso 
     .noCache()//desabilitando cache 
     //.setLogging("LOG",Log.VERBOSE)//para debug 
     .setMultipartParameter("application/json",dadosFoto.toString()) 
     .setMultipartFile("foto","multipart/form-data",file) 
     .asJsonObject() //array recebida 
     .setCallback(new FutureCallback<JsonObject>() { 
      @Override 
      public void onCompleted(Exception e, JsonObject result) { 
       // do stuff with the result or error 
       Log.v("R Foto: ", "" + result); 
       if (e != null) { 
        Toast.makeText(editClientActivity.this, "Erro na Query: " + e, Toast.LENGTH_LONG).show(); //cria balao de texto na view indicada 
        Log.v("Query Error: ", "" + e.getMessage()); //DEBUG 
       } 
       Toast.makeText(editClientActivity.this, "Cliente de cara nova ;) !", Toast.LENGTH_LONG).show(); 

       intent = new Intent(getApplicationContext(), clientSummaryActivity.class); // cria nova intent 
       intent.putExtra("cpfCliente",date.toDbCpf(cpfCliente.getText().toString())); 
       intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
       startActivity(intent); 
      } 
     }); 

답변

1

좋아,이 당황하지만 문제는 안드로이드에 업로드 있었다, 나는 이온 Koush 통화에서에 "이미지를"태그 "사진"을 변경했습니다.

관련 문제