2016-06-13 98 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! –