Ответ
Для отправки файлов на сервер в Android есть несколько подходов:
- HttpURLConnection – классический способ:
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
OutputStream os = connection.getOutputStream();
Files.copy(file.toPath(), os);
os.close();
- 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();
- Retrofit – самый удобный вариант:
@Multipart
@POST("upload")
Call<Response> uploadFile(@Part MultipartBody.Part file);
- WorkManager – для фоновой загрузки
- Firebase Storage – если используется Firebase
Важные нюансы:
- Для больших файлов нужен прогресс-бар
- Обязательно делать в фоне (не в UI-потоке)
- Android 10+ требует scoped storage permissions
- Лучше использовать бинарную передачу для больших файлов