Server ilovaga fayllarni yuklashni qanday amalga oshirasiz?
sobes.tech AI
AIdan javob
Fayllarni yuklash uchun Retrofit kutubxonasidan MultipartBody dan foydalanardim.
-
API interfeysini tayyorlash:
@Multipartva@POSTanotatsiyalari bilan interfeys yaratamiz. Metod fayl uchun@Partva so‘rovning boshqa qismlari uchun qabul qiladi, agar mavjud bo‘lsa.interface FileApi { @Multipart @POST("/upload") suspend fun uploadFile( @Part file: MultipartBody.Part, @Part("description") description: RequestBody? = null ): Response<ResponseBody> } -
MultipartBody.Part yaratish:
FileyokiUriniRequestBodyga, so‘ngraMultipartBody.Partga o‘tkazamiz.// File uchun val file = File("yo‘l/ga/fayl") val requestFile = file.asRequestBody("multipart/form-data".toMediaTypeOrNull()) val filePart = MultipartBody.Part.createFormData("file", file.name, requestFile) // Uri uchun val uri = Uri.parse("...") // Uri ni olamiz val inputStream = context.contentResolver.openInputStream(uri) val requestBody = inputStream!!.readBytes().toRequestBody("multipart/form-data".toMediaTypeOrNull(), 0, inputStream.available()) val filePart = MultipartBody.Part.createFormData("file", "fayl_nomi", requestBody)createFormDataichidagi"file"nomi server kutayotgan parametr nomi bilan mos kelishi kerak. -
Boshqa qismlar uchun RequestBody yaratish: Agar boshqa ma’lumotlarni (matn, raqamlar) yuborish kerak bo‘lsa,
RequestBodydan foydalanamiz.val description = "Fayl tavsifi".toRequestBody("text/plain".toMediaTypeOrNull()) -
So‘rovni bajarish: Retrofit interfeys metodini chaqiramiz, yaratilgan qismlarni uzatamiz.
// FileApi ni in’ektsiya qilish yoki olish val api: FileApi = ... // Coroutine yoki boshqa asinxron kontekstda try { val descriptionPart = "Mening faylim".toRequestBody("text/plain".toMediaTypeOrNull()) val fileToUpload = File("yo‘l/ga/fayl") 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) { // Fayl muvaffaqiyatli yuklandi } else { // Xatolikni boshqarish } } catch (e: Exception) { // Istisnoni boshqarish }
Qo‘shimcha jihatlar:
- Yuklash progressi: Progressni kuzatadigan
RequestBodyni amalga oshirish mumkin, yuklash indikatorini ko‘rsatish uchun. - Katta fayllar: Juda katta fayllar uchun streaming yoki bo‘laklarga bo‘lishni ko‘rib chiqish.
- Xatoliklarni boshqarish: Server javob kodlarini tekshirish va tarmoq xatoliklarini boshqarish.
- Ruxsatlar: Ilovaning fayllarni o‘qish ruxsatiga ega ekanligiga ishonch hosil qilish (
READ_EXTERNAL_STORAGEeski Android versiyalarida). - ViewModel/Repository: Fayl yuklash mantiqini repository yoki ViewModelda joylashtirish, yaxshiroq arxitektura uchun.
- WorkManager: fon yuklamalar uchun foydalanish, ular ilova yopilgan bo‘lsa ham davom etishi uchun.
MultipartBody ning afzalliklari:
- Qo‘shimcha ma’lumotlar bilan fayllarni yuborish uchun standart usul.
- Ko‘pgina server frameworklari tomonidan qo‘llab-quvvatlanadi.
- Retrofit bilan yaxshi integratsiya qilinadi.
Bu Androidda fayl yuklash uchun ishonchli va keng qo‘llaniladigan yondashuvdir.