Я пытаюсь загрузить картинку с кликом из android в Django API, но я получаю 400 Bad Request, когда я пытался отладить с перехватчиком регистрации. Я просмотрел все подобные посты, но ни одна из них не помогла.
Мой Django API работает нормально, когда я пытаюсь загрузить изображение с локального диска, проблема заключается только в том, что я пытался отправить изображение из android в бэкенд. Было бы очень хорошо, если бы кто-нибудь мог мне помочь.
Вот так выглядит мой перехватчик логинга
Так выглядит мой Django API :
Django Views.py
from rest_framework.generics import (CreateAPIView)
from image_app.models import MyImage
from django.http import HttpResponse
from rest_framework.response import Response
from rest_framework import viewsets
class ImageCreateAPIView(CreateAPIView):
queryset = MyImage.objects.all()
serializer_class = imageSerializer
Метод в основной деятельности
public void uploadPicture(File imageFile, Uri uri ){
System.out.println("The imagefile is stored in "+imageFile);
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
clientBuilder.addInterceptor(loggingInterceptor);
/*Retrofit retrofit = new Retrofit.Builder()
.baseUrl(DjangoApi.DJANGO_SITE)
.client(clientBuilder.build())
.addConverterFactory(GsonConverterFactory.create())
.build();
*/
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(DjangoApi.DJANGO_SITE)
.client(clientBuilder.build())
.addConverterFactory(GsonConverterFactory.create())
.build();
Log.d("Django post API", retrofit+"");
DjangoApi postApi= retrofit.create(DjangoApi.class);
RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), imageFile);
MultipartBody.Part multiPartBody = MultipartBody.Part
.createFormData("model_pic", imageFile.getName(), requestBody);
Call<RequestBody> call = postApi.uploadFile(multiPartBody);
call.enqueue(new Callback<RequestBody>() {
@Override
public void onResponse(Call<RequestBody> call, Response<RequestBody> response) {
Log.d("good", "good");
}
@Override
public void onFailure(Call<RequestBody> call, Throwable t) {
Log.d("fail", "fail");
}
});
}
Интерфейс Django API в android конец
public interface DjangoApi {
String DJANGO_SITE = "http://192.168.0.102:8000/image/";
@Multipart
@POST("upload/")
Call<RequestBody> uploadFile(@Part MultipartBody.Part file);
}