2017-02-20 4 views
1

私はこのRetrofit Androidで画像をアップロードするには?

void uploadPhoto(File file) { 
    RequestBody photo = RequestBody.create(MediaType.parse("application/image"), file); 
    RequestBody body = new MultipartBuilder() 
      .type(MultipartBuilder.FORM) 
      .addFormDataPart("photo", file.getName(), photo) 
      .build(); 

    fragment.showProgressDialog(fragment.loading); 
    fragment.getApi().uploadPhoto(PrefHelper.getString(PrefKey.TOKEN), body) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribeOn(Schedulers.io()) 
      .subscribe(new Observer<GenericResponse>() { 
       @Override 
       public void onCompleted() { 

       } 

       @Override 
       public void onError(Throwable e) { 
        fragment.dismissProgressDialog(); 
        Timber.e(e.getMessage()); 
       } 

       @Override 
       public void onNext(GenericResponse response) { 
        fragment.dismissProgressDialog(); 

        if (response.getCode() == 1) { 
         fragment.showSuccessDialog("Saving success", false); 
         userInfo(); 
        } 

       } 
      }); 
} 

ようにし、例えばレトロフィットをアップロード画像を要求する機能を持って、私は私が

に入れておくべきコード私のフラグメント

@OnClick(R.id.btnChangePicture) 
    void onChangePictureClicked() { 

} 

に画像をアップロードするためのボタンがあります

をOnChangePictureClicked

ギャラリーから画像を選択してAPIにリクエストすることができます。

無効uploadPhoto(ファイルファイル)

おかげ

+0

イメージソースの取得やサーバーへのアップロードに関して問題がありましたか? – TruongHieu

+0

私の問題はイメージソースを取得しています@TruongHieu –

+0

あなたはどのソースを取ろうとしたのですか?ギャラリーやカメラのようなもの..? – TruongHieu

答えて

1

バイトの配列にあなたの画像を変換して、以下の例のようなオブジェクトDTOを作成して、レトロフィットを介してサーバに送信します。

@Data 
public class SetProfileImageRequestDto { 
    @SerializedName("Token") 
    private String token; 

    @SerializedName("Stream") 
    private byte[] image; 

}

改修アピサービス:

@POST("SetProfileImage/") 
    Observable<ResultResponseDto> setProfileImage(@Body SetProfileImageRequestDto profileImageRequestDto); 

は、それが動作願っています。

+0

ギャラリーから画像を取得する方法は?どのように私はそれをサーバーに送信したい画像ファイルやデータを取得するには? –

+0

あなたの意図ACTION_PICKはUriを返し、次にこれをチェックします:http://stackoverflow.com/questions/10296734/image-uri-to-bytesarray – MGDiez

1

活動またはフラグメントでURIオブジェクトを作成します。

private Uri selectedImage; 

その後、あなたはonActivityResultのギャラリー結果を取得します。

 @Override 
      protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
       super.onActivityResult(requestCode, resultCode, data); 
       if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { 
        selectedImage = data.getData(); 
       } 
      } 

次に、あなたのonChangePictureClickedメソッドで。

+0

それはうまくいきません –

0

改造してマルチパートを使用することもできます。この画像アップロードの例は、改造を使用してご覧ください。

私のために働いています。

//Create Upload Server Client 
     ApiService service = RetroClient.getApiService(); 

     //File creating from selected URL 
     File file = new File(imagePath); 

     // create RequestBody instance from file 
     RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); 

     MultipartBody.Part body = 
       MultipartBody.Part.createFormData("uploaded_file", file.getName(), requestFile); 

     Call<Result> resultCall = service.uploadImage(body); 

     resultCall.enqueue(new Callback<Result>() { 
      @Override 
      public void onResponse(Call<Result> call, Response<Result> response) { 

       progressDialog.dismiss(); 

       // Response Success or Fail 
       if (response.isSuccessful()) { 
        if (response.body().getResult().equals("success")) 
         Snackbar.make(parentView, R.string.string_upload_success, Snackbar.LENGTH_LONG).show(); 
        else 
         Snackbar.make(parentView, R.string.string_upload_fail, Snackbar.LENGTH_LONG).show(); 

       } else { 
        Snackbar.make(parentView, R.string.string_upload_fail, Snackbar.LENGTH_LONG).show(); 
       } 

       /** 
       * Update Views 
       */ 
       imagePath = ""; 
       textView.setVisibility(View.VISIBLE); 
       imageView.setVisibility(View.INVISIBLE); 
      } 

      @Override 
      public void onFailure(Call<Result> call, Throwable t) { 
       progressDialog.dismiss(); 
      } 
     }); 

http://www.pratikbutani.com/2016/06/android-upload-image-file-using-retrofit-2-0/ 
+0

Rx Javaでどのような例が見えますか? –

関連する問題