Сервердик колдонмо үчүн файлдарды жүктөөнү кантип ишке ашырмаксыз?
sobes.tech AI
AIден жооп
Файлдарды жүктөө үчүн мен MultipartBody колдонуп, Retrofit китепканасынан пайдаланаар элем.
-
API интерфейсин даярдоо:
@Multipartжана@POSTаннотациялары менен интерфейс түзөбүз. Метод файл үчүн@Partжана суранычтын башка бөлүктөрүн кабыл алат, эгер бар болсо.interface FileApi { @Multipart @POST("/upload") suspend fun uploadFile( @Part file: MultipartBody.Part, @Part("description") description: RequestBody? = null ): Response<ResponseBody> } -
MultipartBody.Part түзүү: Биз
FileжеUri-ниRequestBodyжана андан соңMultipartBody.Partкылып өзгөртөбүз.// Файл үчүн val file = File("жол/файлга") val requestFile = file.asRequestBody("multipart/form-data".toMediaTypeOrNull()) val filePart = MultipartBody.Part.createFormData("file", file.name, requestFile) // Uri үчүн val uri = Uri.parse("...") // Uri алуу val inputStream = context.contentResolver.openInputStream(uri) val requestBody = inputStream!!.readBytes().toRequestBody("multipart/form-data".toMediaTypeOrNull(), 0, inputStream.available()) val filePart = MultipartBody.Part.createFormData("file", "аты_файл", requestBody)"file"атыcreateFormDataичинде сервер күтүп жаткан параметр аты менен дал келиши керек. -
Башка бөлүктөр үчүн RequestBody түзүү: Эгер башка маалыматтарды (текст, сандар) жиберүү керек болсо,
RequestBodyколдонобуз.val description = "Файлдын сүрөттөмөсү".toRequestBody("text/plain".toMediaTypeOrNull()) -
Суранычты аткаруу: Retrofit интерфейсинен методду чакырып, түзүлгөн бөлүктөрдү өткөрөбүз.
// Инжекцилөө же FileApiнин инстанциясын алуу val api: FileApi = ... // Корутинде же башка асинхрондук контекстте try { val descriptionPart = "Менин файлым".toRequestBody("text/plain".toMediaTypeOrNull()) val fileToUpload = File("жол/файлга") val requestFile = fileToUpload.asRequestBody("multipart/form-data".toMediaTypeOrNull()) val filePart = MultipartBody.Part.createFormData("file", fileToUpload.name, requestFile) val response = api.uploadFile(filePart, descriptionPart) if (response.isSuccessful) { // Файл ийгиликтүү жүктөлдү } else { // Катаны иштетүү } } catch (e: Exception) { // Исключениени иштетүү }
Кошумча аспекттер:
- Жүктөө прогресс:
RequestBodyменен прогрессти көзөмөлдөөгө болот, жүктөө көрсөткүчүн көрсөтүү үчүн. - Өтө чоң файлдар: Өтө чоң файлдар үчүн streaming же бөлүктөргө бөлүү каралат.
- Ката иштетүү: Сервердин жооп коддорун текшерип, тармак каталарын иштетүү.
- Рухсаттар: Аппликацияда файлдарды окууга уруксат бар экенине ишениңиз (
READ_EXTERNAL_STORAGE) эски Android версияларында. - ViewModel/Repository: Файл жүктөө логикасын репозиторий же ViewModelге жайгаштырыңыз жакшы архитектура үчүн.
- WorkManager: Артында жүктөө үчүн колдонуу, ал колдонуу жабылганда да уланат.
MultipartBodyдин артыкчылыктары:
- Кошумча маалыматтар менен файлдарды жөнөтүү үчүн стандарттык ыкма.
- Көпчүлүк сервердик frameworkтер тарабынан колдоого алынат.
- Retrofit менен жакшы интеграцияланат.
Бул Androidде файлдарды жүктөө үчүн ишенимдүү жана кеңири колдонулган ыкма.