Search code examples
androiddjangodjango-modelsokhttpimagefield

Save image in Django from Android app


I was having problem while saving picture in Django from Android app. I searched and finally solved the problem. I am sharing this so that it might help. Please see the answer below.


Solution

  • You will have to implement things according to your own specifications. I am just showing you as a generic example

    I have used okHttp in my android app to send data on network (including pic)

    Android AsyncTask Code (doInBackground Method)

      RequestBody formBody = new MultipartBody.Builder()
                        .setType(MultipartBody.FORM)
                        .addFormDataPart("filename","filename",RequestBody.create(MediaType.parse("multipart/form-data"), new File(file.getPath())))
                        //.addFormDataPart("other_field", "other_field_value")
                        .build();
                Request request = new Request.Builder()
                        .header("Authorization", "Token " + myToken)
                        .url(myUrl).post(formBody).build();
                Response response = new OkHttpClient().newCall(request).execute();
                return response.body().string();
    

    My view.py Code

    def rechargeapplication(request):
        user=#get your own object
        uploadpic = request.FILES['filename']
        user.picture.save("image.jpg",uploadpic)
        user.save()
        return JsonResponse({'result':'Success'})
    

    How I created imageField in models.py

    picture=models.ImageField(upload_to="photos" , null=True, blank=True)
    

    if you are using ImageField then you will have to install "Pillow" Also make sure that you specify MEDIA_ROOT & MEDIA_URL in settings.py....I am showing you how I did it

    MEDIA_ROOT=os.path.join(BASE_DIR,'media')
    MEDIA_URL = '/media/'
    

    and at the end of urls.py add this(as I was in debug mode that is why my implementation...)

    if settings.DEBUG:
        urlpatterns += static(settings.STATIC_URL,document_root=settings.STATIC_ROOT)
        urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)