使用表单数据修改过帐请求

时间:2019-02-08 06:18:09

标签: android retrofit retrofit2

我是android新手。 我想使用Retrofit Post方法将图像上传为表单数据。 我正在使用com.squareup.retrofit2:retrofit:2.3.0

enter image description here

这是我的请求正文。

3 个答案:

答案 0 :(得分:1)

**通过这样的接口在请求中添加“ MultipartBody.Part”,并将您的图像路径设置为post方法,您可以使用翻新功能上传图像,请使用此networkclient类创建翻新实例**

public class NetworkClient {
    private static final String BASE_URL = "";
    private static Retrofit retrofit;
    public static Retrofit getRetrofitClient(Context context) {
        if (retrofit == null) {
            OkHttpClient okHttpClient = new OkHttpClient.Builder()
                    .build();
            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .client(okHttpClient)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }

}

public interface UploadAPIs {
        @Multipart
        @POST("/upload")
        Call<ResponseBody> uploadImage(@Part MultipartBody.Part file, @Part("name") RequestBody requestBody);
    }    



     private void uploadToServer(String filePath) {
                 Retrofit retrofit = NetworkClient.getRetrofitClient(this);
                 UploadAPIs uploadAPIs = retrofit.create(UploadAPIs.class);
                 //Create a file object using file path
                 File file = new File(filePath);
                 // Create a request body with file and image media type
                 RequestBody fileReqBody = RequestBody.create(MediaType.parse("image/*"), file);
                 // Create MultipartBody.Part using file request-body,file name and part name 
                 MultipartBody.Part part = MultipartBody.Part.createFormData("upload", file.getName(), fileReqBody);
                 //Create request body with text description and text media type
                 RequestBody description = RequestBody.create(MediaType.parse("text/plain"), "image-type");
                 // 
                 Call call = uploadAPIs.uploadImage(part, description);
                 call.enqueue(new Callback() {
                     @Override
                     public void onResponse(Call call, Response response) {
                     }
                     @Override
                     public void onFailure(Call call, Throwable t) {
                     }
                 });
             }

答案 1 :(得分:0)

尝试一下

    @Multipart
    @POST(Global.updateProfilePicture)
    Call<YOUR_RESPONSE_MODEL> updatePicture(@Header("Authorization") String authorization, @PartMap Map<String, RequestBody> params);

API调用应该像这样

public void updatePic(String senderID, String receiverID, String type, File photo) {
    mProgressDialog.show();
    final Map<String, RequestBody> map = new HashMap<>();
    try {
        RequestBody fileBody = RequestBody.create(MediaType.parse("multipart/form-data"), photo);
        map.put("image\"; filename=\"" + photo.getName() + "\"", fileBody);
    } catch (Exception e) {
        e.printStackTrace();
    }
    map.put("sender_id", RequestBody.create(MediaType.parse("multipart/form-data"), senderID));
    map.put("receiver_id", RequestBody.create(MediaType.parse("multipart/form-data"), receiverID));
    map.put("type", RequestBody.create(MediaType.parse("multipart/form-data"), type));

    Call<YOUR_RESPONSE_MODEL> call = mApiInterface.updatePicture(ACCESS_TOKEN, map);
   call.enqueue(new Callback<YOUR_RESPONSE_MODEL>() {
            @Override
            public void onResponse(@NonNull Call<YOUR_RESPONSE_MODEL> call, @NonNull Response<YOUR_RESPONSE_MODEL> response) {
                if (mContext != null) {
                    mProgressDialog.dismiss();
                    // Dismiss Dialog
                   }
            }

            @Override
            public void onFailure(@NonNull Call<YOUR_RESPONSE_MODEL> call, @NonNull Throwable t) {
                if (mContext != null) {
                    mProgressDialog.dismiss();
                }
            }
        });
    }

答案 2 :(得分:0)

我通过执行以下请求获得输出

UploadAPI接口

`

@Multipart
@Headers({"TOKEN:XXXX"})
@POST("/api/messages/image")Call<ImageResult>uploadImage(@Part("sender_id")RequestBody sender_id,@Part("receiver_id")RequestBody receiver_id,@Part("type")RequestBody type,@Part MultipartBody.Part image);`

And Following is Method Code, I tried

`
private void uploadToServer(String filePath) 
{
  Retrofit retrofit = NetworkClient.getRetrofitClient(this, sendImageMsgURL);
  UploadAPIs uploadAPIs = retrofit.create(UploadAPIs.class);
  File file = new File(filePath);       
  MultipartBody.Part requestImage = null;
  RequestBody requestFile = RequestBody.create(MediaType.parse("mutlipart/form- 
  data"),file);
  requestImage = MultipartBody.Part.createFormData("image", file.getName(), requestFile);
  RequestBody sender_id = RequestBody.create(MediaType.parse("multipart/form-data"), 
  currentID);
  RequestBody receiver_id = RequestBody.create(MediaType.parse("multipart/form-data"), 
  otherID);
  RequestBody type = RequestBody.create(MediaType.parse("multipart/form-data"), "image");
  Call<ImageResult> call = uploadAPIs.uploadImage(sender_id, receiver_id, type, 
  requestImage);
  call.enqueue(new Callback<ImageResult>() 
  {
     private Call<ImageResult> call;
     private Response<ImageResult> response;
     @Override
     public void onResponse(Call<ImageResult> call, Response<ImageResult> response)
     {
         this.call = call;
         this.response = response;
     }
     @Override
     public void onFailure(Call call, Throwable t) {
                Log.d("Error--------- :", t.getMessage());
            }
        });
    }`