Какие знаешь способы отправки файлов на сервер

«Какие знаешь способы отправки файлов на сервер» — вопрос из категории Сети, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для отправки файлов на сервер в Android есть несколько подходов:

  1. HttpURLConnection – классический способ:
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
OutputStream os = connection.getOutputStream();
Files.copy(file.toPath(), os);
os.close();
  1. OkHttp – более удобная библиотека:
RequestBody fileBody = RequestBody.create(file, MediaType.parse("multipart/form-data"));
RequestBody requestBody = new MultipartBody.Builder()
    .addFormDataPart("file", file.getName(), fileBody)
    .build();
Request request = new Request.Builder().url(url).post(requestBody).build();
  1. Retrofit – самый удобный вариант:
@Multipart
@POST("upload")
Call<Response> uploadFile(@Part MultipartBody.Part file);
  1. WorkManager – для фоновой загрузки
  2. Firebase Storage – если используется Firebase

Важные нюансы:

  • Для больших файлов нужен прогресс-бар
  • Обязательно делать в фоне (не в UI-потоке)
  • Android 10+ требует scoped storage permissions
  • Лучше использовать бинарную передачу для больших файлов