2016-12-02 10 views
3

ここではデータに@FormUrlEncodedを使用していますが、同じAPIで@Part("user_image") RequestBody file@Multipartを両方とも使用する必要があります。どのように可能ですか?前もって感謝します。Retrofit(@Fields)で画像ファイルを送信する方法

@FormUrlEncoded 
@POST("/datingapp/index.php/Webservice") 
Call<Result> signupUser(@Field("user_name") String name, 
          @Field("age") String age, 
          @Field("work") String work, 
          @Field("home_town") String home_town, 
          @Field("gender") String gender, 
          @Field("interest") String interest, 
          @Field("study") String study, 
          @Field("email") String email, 
          @Field("password") String password, 
          @Field("device_id") String device_id, 
          @Field("device_type") String device_type, 
          @Part("user_image") RequestBody file, 
          @Field("signup") String signup); 
+0

をあなたはBase64文字列の形式で画像を送信することができます。私はRetrofitを使用したことはありませんが、こちら[こちら](http://stackoverflow.com/questions/22787585/android-retrofit-base64-body)と[こちら](http://stackoverflow.com/questions/32009612/retrofit -send-base64-encoded-string in-parameters) –

答えて

2

Httpプロトコルでは、同じリクエストで2つのContent-Typeを許可しません。あなたがする必要がある画像を送信するために、あなたは注釈@FormUrlEncodedを使用してapplication/x-www-form-urlencodedを使用

  • アプリケーション/ x-www-form-urlencodedで
  • マルチパート/フォームデータを

:だから、選択する必要がありますファイル全体をテキストに変換します(例:base64)。

より良いアプローチは、そのようなあなたの要求を記述することにより、使用multipart/form-data次のようになります。

@Multipart 
@POST("/datingapp/index.php/Webservice") 
Call<Result> signupUser(@Part("user_name") String name, 
         @Part("age") String age, 
         @Part("work") String work, 
         @Part("home_town") String home_town, 
         @Part("gender") String gender, 
         @Part("interest") String interest, 
         @Part("study") String study, 
         @Part("email") String email, 
         @Part("password") String password, 
         @Part("device_id") String device_id, 
         @Part("device_type") String device_type, 
         @Part("user_image") RequestBody file, 
         @Part("signup") String signup); 
+0

ThanQ Sir !!!できます! :D –

+0

はPUTメソッドで可能ですか? @Lionel Briand –

+0

@KoVartthan動作はPOSTと同じですので、技術的にはyes –

0
@Multipart 
@POST("/datingapp/index.php/Webservice") 
Call<Result> signupUser(@PartMap Map<String,String> queryMap, 
          @Part("user_image") RequestBody file); 

ここ@PartMapは、上記などのような例えば、キーと値を含むHashMap以外の何ものでもありません必要な他のパラメータ、

LinkedHashMap<String,String> map = new LinkedHashMap<String,String>(); 
map.put("user_name",username); 

が含まれています。

-1

は、このようなAPI呼び出してください:

@POST("/datingapp/index.php/Webservice") 
@FormUrlEncoded 
@Multipart 
Call<Result> signupUser(@FieldMap LinkedHashMap<String, String> data,@Part RequestBody file); 

をし、あなたのデータを渡すで、キーと値の形式でありますLinkedHashMap like this

LinkedHashMap<String, String> data = new LinkedHashMap<>(); 
data.put("user_name", user_name); 
data.put("age", age); 
data.put("work", work); 
data.put("work", work); 
data.put("gender", gender); and so on .... 

イメージを取得するMultiparts:APIをヒットする

RequestBody file= RequestBody.create(MediaType.parse("image/jpeg"), file); 

最終コール:

Call<Result> call = apiService.signupUser(data ,file); 

希望これは動作します:)

+1

'@ Multipart'アノテーションは' @ FormUrlEncoded'では使用できません。また、 '@ FieldMap'シャーリングは' @ PartMap' – Ninja

関連する問題