2016-03-24 21 views
1

画像をアップロードしようとすると、画像ファイルではなくバイトとして送信され続けます。これは非常に簡単な呼び出しです。イメージ以外のパラメータを送信する必要はありません。私はログをフォーマットする方法を知らないので、要求されない限りここにエラーを掲載しません。Retrofit 2.0を使用して画像をアップロードする方法

サービス:

public interface FileUploadService { 

@Multipart 
@POST("upload_profile_picture") 
Call<ResponseBody> uploadProfilePicture(@Part("profile_picture") RequestBody file); 
} 

作られているコールは、(SO主words..dumbするポストを必要とするため、ファイルが生成される以前、このコードを削除する必要がありました。):

// Generate the service from interface 
    FileUploadService service = ServiceGenerator.createService(FileUploadService.class, this); 

    // Create RequestBody instance from file 
    RequestBody requestFile = 
      RequestBody.create(MediaType.parse("image/*"), imageFile); 
    Log.d(LOG_TAG, "formed file"); 

    // finally, execute the request 
    Call<ResponseBody> call = service.uploadProfilePicture(requestFile); 
    Log.d(LOG_TAG, "sending call"); 
    call.enqueue(new Callback<ResponseBody>() { 
     @Override 
     public void onResponse(Call<ResponseBody> call, 
           Response<ResponseBody> response) { 
      Log.d(LOG_TAG, "success"); 
      Log.d(LOG_TAG, response.toString()); 
     } 

     @Override 
     public void onFailure(Call<ResponseBody> call, Throwable t) { 
      Log.d(LOG_TAG, "failure"); 
      Log.e(LOG_TAG, t.getMessage()); 
     } 
    }); 

MediaType.parseメソッドの問題はありますか?私は "multipart/form-data"、 "image/jpeg"、そして上記を試してみましたが、何も効果がありませんでした。

サーバチームは、は、がバイトを受信し、画像ファイルはないと言っています。

すべてのバイトを送信しているので、私は400を得続けます。どうすればこれを送ることができますか?私はマルチパートや何で送る必要がありますか?私が見たことから、あなたは@Bodyでメソッドのparamにタグを付けるだけで、上記を実行する必要があり、それはすべて動作するはずです。誰がなぜこれが起こっているのか教えていただけますか?ありがとう!

答えて

0

これは編集

2.レトロフィットでknown issueです:OkHttpのMultipartBody.Partのサポートは、最終的な2.0リリースで追加されました。

それが働いて得るために、あなたは少し最初にあなたのインターフェイスを変更する必要があります。そして、あなたがPartを作成し、このような呼び出しを行う必要があり

@Multipart 
@POST("upload_profile_picture") 
Call<ResponseBody> uploadProfilePicture(@Part MultipartBody.Part file); 

を:

MultipartBody.Part file = MultipartBody.Part.createFormData(
      "file", 
      imageFile.getName(), 
      RequestBody.create(MediaType.parse("image/*"), imageFile)); 

Call<ResponseBody> call = service.uploadProfilePicture(file); 
+0

私はこれは受け入れられた答えでなければならないと思う:) – BNK