How to upload an image file in Retrofit 2 How to upload an image file in Retrofit 2 android android

How to upload an image file in Retrofit 2


@Multipart@POST("user/updateprofile")Observable<ResponseBody> updateProfile(@Part("user_id") RequestBody id,                                       @Part("full_name") RequestBody fullName,                                       @Part MultipartBody.Part image,                                       @Part("other") RequestBody other);//pass it like thisFile file = new File("/storage/emulated/0/Download/Corrections 6.jpg");RequestBody requestFile =        RequestBody.create(MediaType.parse("multipart/form-data"), file);// MultipartBody.Part is used to send also the actual file nameMultipartBody.Part body =        MultipartBody.Part.createFormData("image", file.getName(), requestFile);// add another part within the multipart requestRequestBody fullName =         RequestBody.create(MediaType.parse("multipart/form-data"), "Your Name");service.updateProfile(id, fullName, body, other);

Look at the way I am passing the multipart and string params. Hope this will help you!


For those with an inputStream, you can upload inputStream using Multipart.

@Multipart@POST("pictures")suspend fun uploadPicture(        @Part part: MultipartBody.Part): NetworkPicture

Then in perhaps your repository class:

suspend fun upload(inputStream: InputStream) {   val part = MultipartBody.Part.createFormData(         "pic", "myPic", RequestBody.create(              MediaType.parse("image/*"),              inputStream.readBytes()          )   )   uploadPicture(part)}

If your backend does not allow multipart, you can convert the input stream into bytes and send the byte array as the request body, like so.

// In your service @PUT suspend fun s3Upload(     @Header("Content-Type") mime: String,     @Url uploadUrl: String,      @Body body: RequestBody  )// In your repositoryval body = RequestBody.create(MediaType.parse("application/octet"), inputStream.readBytes())networkService.s3Upload(mime, url, body)

To get an input stream you can do something like so.

In your fragment or activity, you need to create an image picker that returns an InputStream. The advantage of an InputStream is that it can be used for files on the cloud like google drive and dropbox.

Call pickImagesLauncher.launch("image/*") from a View.OnClickListener or onOptionsItemSelected. (See Activity Result APIs).

private val pickImagesLauncher =           registerForActivityResult(ActivityResultContracts.GetContent()) { uri ->                uri?.let {                    val stream = contentResolver.openInputStream(it)                    itemViewModel.uploadPicture(stream)                }            }override fun onCreate(savedInstanceState: Bundle?) {      super.onCreate(savedInstanceState)      btn.setOnClickListener {         pickImagesLauncher.launch("image/*")     } }


Upload Image See Here click This Linkenter image description here

import retrofit2.Retrofit;import retrofit2.converter.gson.GsonConverterFactory;class AppConfig {    private static String BASE_URL = "http://mushtaq.16mb.com/";    static Retrofit getRetrofit() {        return new Retrofit.Builder()                .baseUrl(AppConfig.BASE_URL)                .addConverterFactory(GsonConverterFactory.create())                .build();    }}========================================================import okhttp3.MultipartBody;import okhttp3.RequestBody;import retrofit2.Call;import retrofit2.http.Multipart;import retrofit2.http.POST;import retrofit2.http.Part;interface ApiConfig {    @Multipart    @POST("retrofit_example/upload_image.php")    Call<ServerResponse> uploadFile(@Part MultipartBody.Part file,                                    @Part("file") RequestBody name);    /*@Multipart    @POST("ImageUpload")    Call<ServerResponseKeshav> uploadFile(@Part MultipartBody.Part file,                                    @Part("file") RequestBody name);*/    @Multipart    @POST("retrofit_example/upload_multiple_files.php")    Call<ServerResponse> uploadMulFile(@Part MultipartBody.Part file1,                                       @Part MultipartBody.Part file2);}//https://drive.google.com/open?id=0BzBKpZ4nzNzUMnJfaklVVTJkWEk