Server tətbiqinə faylların yüklənməsini necə həyata keçirərdiniz?
sobes.tech Süni İntellekt
AI-dan cavab
Faylları yükləmək üçün Retrofit kitabxanasından MultipartBody istifadə edərdim.
-
API interfeysinin hazırlanması:
@Multipartvə@POSTannotasiyaları ilə interfeys yaradırıq. Metod fayl üçün@Partvə digər sorğu hissələri üçün qəbul edir, əgər varsa.interface FileApi { @Multipart @POST("/upload") suspend fun uploadFile( @Part file: MultipartBody.Part, @Part("description") description: RequestBody? = null ): Response<ResponseBody> } -
MultipartBody.Part yaradılması:
Filevə yaUri-niRequestBody-yə və sonraMultipartBody.Part-a çeviririk.// File üçün val file = File("yol/filə") val requestFile = file.asRequestBody("multipart/form-data".toMediaTypeOrNull()) val filePart = MultipartBody.Part.createFormData("file", file.name, requestFile) // Uri üçün val uri = Uri.parse("...") // Uri əldə edilir 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_adi", requestBody)"file"adınıncreateFormData-da server tərəfindən gözlənilən parametr adı ilə uyğun olması vacibdir. -
Digər hissələr üçün RequestBody yaradılması: Əgər digər məlumatlar (mətin, ədədlər) göndəriləcəkdirsə,
RequestBodyistifadə olunur.val description = "Faylın təsviri".toRequestBody("text/plain".toMediaTypeOrNull()) -
Sorğunun icrası: Retrofit interfeysindən metodu çağırırıq, yaradılmış hissələri ötürürük.
// FileApi nümunəsini injekt etmək və ya əldə etmək val api: FileApi = ... // Korutina və ya digər asinxron kontekst try { val descriptionPart = "Mənim faylım".toRequestBody("text/plain".toMediaTypeOrNull()) val fileToUpload = File("yol/filə") 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 uğurla yükləndi } else { // Xəta ilə işləmək } } catch (e: Exception) { // İstisnaya işləmək }
Əlavə aspektlər:
- Yükləmə proqresi: Proqresi izləyən
RequestBody-ni həyata keçirmək olar, yükləmə göstəricisi göstərmək üçün. - Böyük fayllar: Çox böyük fayllar üçün streaming və ya hissələrə bölmə nəzərdən keçirilə bilər.
- Xəta işləmə: Serverin cavab kodlarını yoxlamaq və şəbəkə xətalarını idarə etmək.
- İcazələr: Tətbiqin faylları oxumağa icazəsi olduğundan əmin olmaq (
READ_EXTERNAL_STORAGEköhnə Android versiyalarında). - ViewModel/Repository: Fayl yükləmə məntiqini repository və ya ViewModel-də yerləşdirmək daha yaxşı arxitektura üçün.
- WorkManager: Fon yükləməsi üçün istifadə edilə bilər, tətbiq bağlandıqda belə davam etməlidir.
MultipartBody-nin üstünlükləri:
- Əlavə məlumatlarla fayl göndərmək üçün standart üsul.
- Əksər server çərçivələri tərəfindən dəstəklənir.
- Retrofit ilə yaxşı inteqrasiya olunur.
Bu, Android-də fayl yükləmək üçün etibarlı və geniş istifadə olunan yanaşmadır.