2016-06-13 6 views
1

私はレトロフィット1.9POSTリクエストを送信するために使用:マルチパートレトロフィット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に移動しますが、私はそれが同じように作業することはできません。

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 
    ); 

をしかし、要求がファイル(写真)なしで起こっているようだ:https://github.com/square/retrofit/issues/1140によると、私が使用していました。なにが問題ですか ?

答えて

4

retrofit 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! –

関連する問題