Retrofit 2 Multipart POST request sends extra quotes to PHP
For your issue, please use as the documentation
Scalars (primitives, boxed, and String): com.squareup.retrofit2:converter-scalars
So, add compile 'com.squareup.retrofit2:converter-scalars:2.0.1'
into build.gradle
file
Then...
Retrofit retrofit = new Retrofit.Builder() .baseUrl(API_URL_BASE) .addConverterFactory(ScalarsConverterFactory.create()) //.addConverterFactory(GsonConverterFactory.create()) .build();
Hope it helps!
Use RequestBody
for all your parameters. Please go through below code!!
File file = new File(imagePath);RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);MultipartBody.Part imageFileBody = MultipartBody.Part.createFormData("media", file.getName(), requestBody);RequestBody id = RequestBody.create(MediaType.parse("text/plain"),addOfferRequest.getCar_id());ApiCallback.MyCall<BaseResponse> myCall = apiRequest.editOfferImage(imageFileBody,id);
Use RequestBody
class of Retrofit
instead of String
@Multipart@POST(ApiURL)ApiCallback.MyCall<BaseResponse> editOfferImage(@Part MultipartBody.Part imageFile,@Part("id") RequestBody id);
I faced this on my project today and this is how I solved it. I changed @Part on my string and other primitive values to @Query, and for file (in my case image) i used @Part. Looks like @Query treats strings in a different way compared to @Part.
So my answer to original question would look like this:
@Multipart@POST("api.php")Call<ResponseBody> doAPI( @Query("lang") String lang, @Part("file\"; filename=\"image.jpg") RequestBody file);
This should send string values without unwanted quotes.Sadly, I cant explain why this works, it has something to do with @Part encoding of data.