Creating a proper MultipartBuilder Http Request with OKHttp

前端 未结 3 1768
无人及你
无人及你 2021-01-07 08:20

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.

相关标签:
3条回答
  • 2021-01-07 08:33

    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());
    }
    
    0 讨论(0)
  • 2021-01-07 08:36

    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);
    
    0 讨论(0)
  • 2021-01-07 08:42

    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'
    
    0 讨论(0)
提交回复
热议问题