Arsalan Siddiqui
Arsalan Siddiqui

Reputation: 29

what is the issue in file uploading using retrofit (pdf,ppt, png,jpg) "code=500, internal server error"

enter image description hereI'm setting up the file uploading function using retrofit but I am getting internal server error. Sometime file is uploading on the server with details but response is coming in error body. I have no idea is there any problem in my code or in server side code.

I have tried different code for request body.

RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); MultipartBody.Part body = MultipartBody.Part.createFormData("pic", file.getName(), requestFile);

  File file = new File(PathHolder);

     RequestBody requestFile = 
     RequestBody.create(MediaType.parse("multipart/form-data"), file);

     MultipartBody.Part body = MultipartBody.Part.createFormData("pic", 
     file.getName(), requestFile);

     RequestBody userId = 
     RequestBody.create(MediaType.parse("text/plain"), uid);

     RequestBody topic = RequestBody.create(MediaType.parse("text/plain"), 
     topicName);

     RequestBody classID = 
     RequestBody.create(MediaType.parse("text/plain"), classId);

     RequestBody shiftID = 
     RequestBody.create(MediaType.parse("text/plain"), shiftId);

     Call<UploadDocumentResponse> resultCall = service.uploadImage(userId, 
        topic, classID, shiftID, body);

     resultCall.enqueue(new Callback<UploadDocumentResponse>() {

     @Override

     public void onResponse(Call<UploadDocumentResponse> call, 
        Response<UploadDocumentResponse> response) {

      progressDialog.dismiss();

      onBackPressed();

       UploadDocumentResponse iresponse = response.body();

      // ViewDocModel Success or Fail
      if (response.isSuccessful()) {
      Toast.makeText(getApplicationContext(), response.body().
      getMsg(), Toast.LENGTH_LONG).show();

      imageView.setImageDrawable(null);

      imagePath = null;
     }

   }

     @Override
     public void onFailure(Call<UploadDocumentResponse> call, Throwable t) 
      {

        progressDialog.dismiss();

         Toast.makeText(getApplicationContext(), "couldn't upload file, 
         please try 
         again", Toast.LENGTH_LONG).show();

        }
    });

   // APIInterface

   @Multipart
   @POST("Camp/API_uploadfile.php")
   Call<UploadDocumentResponse> uploadImage(@Part("uid") RequestBody uid,
                                         @Part("topic") RequestBody 
                                         topic,
                                         @Part("classid") RequestBody 
                                                              classId,
                                         @Part("shiftid") RequestBody 
                                                              shiftId,
                                         @Part MultipartBody.Part file);

Expected result is file should be upload on server and get response in success. Actual result is getting internal server error and sometime getting success response message in error body.

Upvotes: 0

Views: 331

Answers (1)

Arsalan Siddiqui
Arsalan Siddiqui

Reputation: 29

I have solved this issue. I was using wrong pattern of request body. I had to use multipart form data instead of text.

File file1 = new File(imageFilePathFront);
        RequestBody requesFile = RequestBody.create(MediaType.parse("multipart.form- 
data"), file1);
        cnicFront = MultipartBody.Part.createFormData("CNIC_FRONT_IMG", 
file1.getName(), requesFile);

This is the right code worked for me.

Upvotes: 0

Related Questions