Upload multipart image data in JSON with Retrofit?

后端 未结 3 1614
清酒与你
清酒与你 2021-01-04 20:06

I would like to do a PUT request with this JSON body (containing a picture) and with Retrofit. I\'m using it under Android:

{
    \"Request\": {
        \"da         


        
相关标签:
3条回答
  • 2021-01-04 20:43

    You need to put image data in byte by using multipart form data.

    try {
        HttpPost httppost = new HttpPost("some url");
        MultipartEntity multipartEntity = 
            new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);  
        multipartEntity.addPart("Image", new FileBody(image));
        httppost.setEntity(multipartEntity);
        mHttpClient.execute(httppost, new YOURHANDLER());
    } catch (Exception e) {
        Log.e(ServerCommunication.class.getName(), e.getLocalizedMessage(), e);
    }
    

    To send post request using parameters

    HttpPost httpPost = new HttpPost(url);
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    
    if (values != null) {
        for (Map.Entry<String, String> entry : values.entrySet()) {
            nameValuePairs.add(
                new BasicNameValuePair(entry.getKey(), entry.getValue()));
        }
        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
    }
    
    0 讨论(0)
  • 2021-01-04 20:59

    Ok, I found a solution using multipart, somethings like that:

    @Multipart
    @PUT("/users/{id}")
    void modifyPic(
        @Header("auth_token") String token,
        @Path("id") int userid,
        @Part("request[data][param][title]") String title,
        @Part("request[data][param][Photo]") TypedFile avatar,
        Callback<User> cb
    );
    
    0 讨论(0)
  • 2021-01-04 21:02

    Retrofit only takes multipart and requestbody for its multipart.

    Call<SubmitLevel1Part2IconResp> loadLevel1halfIconswithImage(@Part("headerdata[relation][icon_type]") RequestBody icon_type, @Part("headerdata[relation][name]") RequestBody name, @Part MultipartBody.Part file);
    

    And then in java

     // MultipartBody.Part is used to send also the actual filename
     MultipartBody.Part body =  MultipartBody.Part.createFormData("headerdata[relation][relative_image]", fileUpload.getName(), requestFile);
    
    
    
    call = service.loadLevel1halfIconswithImage(icon_type, name, body);
    
    0 讨论(0)
提交回复
热议问题