ild like to recode my project and use okHttp instead of the default HttpClient implemented in Android.
I\'ve downloaded the latest source of the okhttp-main release.
Uploading file in multipart using OkHttp
private static final String IMGUR_CLIENT_ID = "...";
private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
private final OkHttpClient client = new OkHttpClient();
public void run() throws Exception {
// Use the imgur image upload API as documented at https://api.imgur.com/endpoints/image
RequestBody requestBody = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addPart(
Headers.of("Content-Disposition", "form-data; name=\"title\""),
RequestBody.create(null, "Square Logo"))
.addPart(
Headers.of("Content-Disposition", "form-data; name=\"image\""),
RequestBody.create(MEDIA_TYPE_PNG, new File("website/static/logo-square.png")))
.build();
Request request = new Request.Builder()
.header("Authorization", "Client-ID " + IMGUR_CLIENT_ID)
.url("https://api.imgur.com/3/image")
.post(requestBody)
.build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
System.out.println(response.body().string());
}
This worked for me using okHttp3:
OkHttpClient client = new OkHttpClient();
File file = new File(payload);
RequestBody formBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", "image.jpg",
RequestBody.create(MediaType.parse("image/jpg"), file))
.build();
Request request = new Request.Builder().url(url).post(formBody).build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
I modified Dr. Enemy's answer:
MultipartBody.Builder builder =new MultipartBody.Builder().setType(MultipartBody.FORM);
for (Object aMData : dataClass.getData().entrySet()) {
Map.Entry mapEntry = (Map.Entry) aMData;
String keyValue = (String) mapEntry.getKey();
String value = (String) mapEntry.getValue();
builder.addPart(keyValue, value);
}
for (DataPackage dataPackage : dataClass.getDataPackages()) {
builder.addPart("upfile[]", dataPackage.getFile());
}
Start adding the formDataPart to builder and at end create RequestBody
RequestBody requestBody = builder.build();
you can perform above actions with
compile 'com.squareup.okhttp3:okhttp:3.4.1'