상세 컨텐츠

본문 제목

Android - Retrofit 에서 Multipart form 으로 데이터 보내는 방법

Android

by yjh0922 2022. 7. 26. 10:21

본문

1. 파일을 보내는 방법

 

2. 텍스트로 보내기 위한 방법

 

public class AddActivity {
	private File photoFile;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add);


        btnSave.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    if (photoFile == null) {
                        Toast.makeText(AddActivity.this, "사진은 필수입니다.", Toast.LENGTH_SHORT).show();
                        return;
                    }

                    String content = editContent.getText().toString().trim();
                    if (content.isEmpty()) {
                        Toast.makeText(AddActivity.this, "내용을 입력하세요.", Toast.LENGTH_SHORT).show();
                        return;
                    }
                    Retrofit retrofit = NetworkClient.getRetrofitClient(AddActivity.this);
                    PostingApi api = retrofit.create(PostingApi.class);

                    // 멀티파트로 파일을 보내는 경우, 파일 파라미터 만드는 방법
                    RequestBody fileBody = RequestBody.create(photoFile, MediaType.parse("image/*"));
                    MultipartBody.Part photo = MultipartBody.Part.createFormData("photo", photoFile.getName(), fileBody);
                    // 멀티파트로 텍스트를 보내는 경우, 파라미터 만드는 방법
                    RequestBody contentBody = RequestBody.create(content, MediaType.parse("text/plain"));

                    // 헤더에 들어갈 억세스토큰 가져온다.
                    SharedPreferences sp = getApplication().getSharedPreferences(Config.PREFERENCES_NAME, MODE_PRIVATE);
                    String accessToken = sp.getString("accessToken", "");


                    Call<PostRes> call = api.addPosting("Bearer " + accessToken,
                            photo, contentBody);

                    showProgress("포스팅 업로드중");

                    call.enqueue(new Callback<PostRes>() {
                        @Override
                        public void onResponse(Call<PostRes> call, Response<PostRes> response) {
                            dismissProgress();

                            Toast.makeText(AddActivity.this, "업로드가 완료되었습니다.", Toast.LENGTH_SHORT).show();
                            finish();
                        }

                        @Override
                        public void onFailure(Call<PostRes> call, Throwable t) {
                            dismissProgress();
                        }
                    });
                }
            });
            
     }

관련글 더보기