2016-06-13 99 views
1

我用來發送POST請求改造1.9多部分改造1.9 - > 2

TypedFile typedFile = picture != null ? new TypedFile("image/*", tempFile) : null; 

@Multipart 
@POST("/goals") 
Observable<Goal> postGoal(
     @Part("name") String name, 
     @Part("picture") TypedFile picture 
     ); 

我搬到改造2.0.2,但我不能讓它的工作是相同的。據https://github.com/square/retrofit/issues/1140我用:

RequestBody name = RequestBody.create(MediaType.parse("text/plain"), name); 
RequestBody picture = RequestBody.create(MediaType.parse("image/*"), tempFile); 


    @Multipart 
    @POST("goals") 
    Observable<Goal> postGoal(
      @Part("name") RequestBody name, 
      @Part("picture\"; filename=\"temp.png\" ") RequestBody picture 
    ); 

但似乎沒有請求的文件(照片)是怎麼回事。哪裏不對 ?

回答

4

要使用改進2.0上傳圖像,您可以使用MultipartBody.Part作爲圖像的參數。希望這個解決方案解決你的問題

你的API聲明

@Multipart 
@POST("/goals") 
Observable<Goal> postGoal(@Part("name") String name, @Part MultipartBody.Part imageFile); 

你的API調用

RequestBody imageName = RequestBody.create(MediaType.parse("text/plain"), name); 

//prepare image file 
File file = new File(imagePath); 
RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); 
MultipartBody.Part imageFileBody = MultipartBody.Part.createFormData("picture", file.getName(), requestBody); 

YourAPI service = retrofit.create(YourAPI.class); 
Call<Goal> call = service.postGoal(imageName, imageFileBody); 
call.enqueue(new Callback<Goal>() { 
    @Override 
    public void onResponse(Call<Goal> call, Response<Goal> response) { 
     //handle success 
    } 

    @Override 
    public void onFailure(Call<Goal> call, Throwable t) { 

    } 
}); 
+0

是的,這正是我所發現的爲好。我希望儘管會有更清晰的解決方案;)Thx! –