Retrofit2 라이브러리를 이용하여 파일을 업로드하는 예제 예시다.
파일 업로드 외에 POST 변수 idx를 추가해서 보낼 때,
RequestBody descBody = RequestBody.create(MediaType.parse("text/plain"), idx);
가 추가하면 된다.
Retrofit2 통신에 대한 기본 이해는 https://link2me.tistory.com/1806 에 이미지 도식도를 참조하시라.

앱 build.gradle
dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.constraintlayout:constraintlayout:2.0.1' implementation 'com.google.android.material:material:1.2.1'
implementation 'com.squareup.okhttp3:okhttp:4.4.0' implementation 'com.squareup.retrofit2:retrofit:2.7.0' implementation 'com.squareup.retrofit2:converter-gson:2.7.0' implementation 'com.squareup.okhttp3:logging-interceptor:4.4.0' } |
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
public interface DataCommAPI {
@Multipart @POST(RetrofitURL.URL_ImageUpload) Call<UploadResult> uploadFile(@Part("idx") RequestBody idx, @Part MultipartBody.Part uploaded_file); }
public class UploadResult { private String result;
public String getResult() { return result; }
}
|
public class RetrofitURL { public static final String IPADDRESS = "http://www.abc.com/androidSample/upload/";
public static final String URL_ImageUpload = "upload.php"; }
|
public class APIRequest { static Retrofit retrofit = null;
public static Retrofit getClient() { if (retrofit==null) { retrofit = new Retrofit.Builder() .baseUrl(RetrofitURL.IPADDRESS) .client(createOkHttpClient()) .addConverterFactory(GsonConverterFactory.create()) .build(); } return retrofit; }
public static OkHttpClient createOkHttpClient() { // 네트워크 통신 로그(서버로 보내는 파라미터 및 받는 파라미터) 보기 OkHttpClient.Builder builder = new OkHttpClient.Builder(); HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); builder.addInterceptor(interceptor); return builder.build(); } }
|
private void uploadImage(String sourceImageFile, String idx){ DataCommAPI retrofitInterface = APIRequest.getClient().create(DataCommAPI.class);
File file = new File(sourceImageFile); RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); MultipartBody.Part body = MultipartBody.Part.createFormData("uploaded_file", file.getName(), requestFile); RequestBody descBody = RequestBody.create(MediaType.parse("text/plain"), idx);
Call<UploadResult> call = retrofitInterface.uploadFile(descBody,body); call.enqueue(new Callback<UploadResult>() { @Override public void onResponse(Call<UploadResult> call, Response<UploadResult> response) { if (response.isSuccessful()) { UploadResult responseBody = response.body(); if(responseBody.getResult().contains("success")){ Toast.makeText(getApplicationContext(), "파일 업로드 성공", Toast.LENGTH_LONG).show(); } else { Utils.showAlert(mContext,"파일 업로드","파일 업로드 실패"); }
} else { ResponseBody errorBody = response.errorBody(); Gson gson = new Gson(); try { Response errorResponse = gson.fromJson(errorBody.string(), Response.class); Toast.makeText(getApplicationContext(), errorResponse.message(), Toast.LENGTH_LONG).show(); } catch (IOException e) { e.printStackTrace(); } } }
@Override public void onFailure(Call<UploadResult> call, Throwable t) { Log.e(TAG, "onFailure: "+t.getLocalizedMessage()); } });
}
|