2016-07-19 2 views
0

retrofit2を使用して、私のAPIにpngのアップロードリクエストを行いたいと思います。これはPOSTリクエストでなければならず、pngはフォームデータフィールド "img"として渡されます。 Postmanを使用してAPIをテストしたところ、すべて動作しましたが、retrofit2を使用してアンドロイドアプリからこのリクエストを行いたいと考えています。この図書館はそのような要求をすることさえ可能ですか?retrofit2を使用してPOSTリクエストを行う方法フォームデータフィールドの1つがファイルの場合

enter image description here

答えて

1

は、画像をアップロードするにはdepedencies

コンパイル 'com.amitshekhar.android:android-networking:0.0.1' を追加しますインターフェイスと必要なエンドポイントメソッドの定義:

public interface ApiClient { 
    @Multipart 
    @POST("/content") 
    Call<ResponseBody> uploadImage(@Part("image") RequestBody image); 
} 
+0

それは動作します!どうもありがとうございました。私はかなり長い間これを苦労していました。 – Egis

0

それは、シンプルで早いのが特長アンドロイドネットワーキング・ライブラリであるとして、あなたはそのためFast Android Networkingライブラリーを試すことができかもしれません。私はOKHttpの上に構築され、Retrofitよりも多くの機能とカスタマイズを備えたこのライブラリを作成しました。

File file = new File("/storage/emulated/0/Pictures/MyApp/test.jpg"); 

RequestBody requestBody = new MultipartBuilder() 
          .type(MultipartBuilder.FORM) 
          .addPart(Headers.of("Content-Disposition", 
            "form-data; name=\"image\";filename=\"" 
            + file.getName() + "\""), 
           RequestBody.create(MEDIA_TYPE_JPG, file)) 
          .build(); 

// Todo: replace with your own interface e.g. apiClient 
Call<ResponseBody> call = apiClient.uploadImage(requestBody); 

call.enqueue(new Callback<ResponseBody>() { 

    @Override 
    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { 
     Log.v("Upload", "success"); 
    } 

    @Override 
    public void onFailure(Call<ResponseBody> call, Throwable t) { 
     Log.e("Upload error:", t.getMessage()); 
    } 
}); 

例:あなたのGradleファイルで

File file = new File(imagePath); 
    AndroidNetworking.upload(url) 
        .addMultipartFile("img",file) 
        .setTag("uploadTest") 
        .setPriority(Priority.HIGH) 
        .build() 
        .setUploadProgressListener(new UploadProgressListener() { 
         @Override 
         public void onProgress(long bytesUploaded, long totalBytes) { 
         // do anything with progress 
         } 
        }) 
        .getAsJSONObject(new JSONObjectRequestListener() { 
         @Override 
         public void onResponse(JSONObject response) { 
         // do anything with response     
         } 
         @Override 
         public void onError(ANError error) { 
         // handle error 
         } 
        }); 
} 
+0

別のライブラリを使用することはできません。私はすでに私のアプリでどこでもretrofit2を使っています。ライブラリを交換することは負担になります。 – Egis

+0

@Egis:Ok Bro、私は改造によってそれを解決しようとし、すぐにお知らせします。 https://github.com/amitshekhariitbhu/Fast-Android-Networkingにいくつかのフィードバックを送ろうと思っていました。 –

関連する問題