Middle
Kā jūs realizētu failu augšupielādi servera lietojumprogrammā?
sobes.tech AI
Atbilde no AI
Failu augšupēšanai es izmantotu MultipartBody no Retrofit bibliotēkas.
-
API interfeisa sagatavošana: Izveidojam interfeisu ar anotāciju
@Multipartun@POST. Metode pieņem@Partfailam un citām pieprasījuma daļām, ja tās ir.interface FileApi { @Multipart @POST("/upload") suspend fun uploadFile( @Part file: MultipartBody.Part, @Part("description") description: RequestBody? = null ): Response<ResponseBody> } -
MultipartBody.Part izveide: Pārvēršam
FilevaiUriuzRequestBody, tad uzMultipartBody.Part.// Faila gadījumā val file = File("ceļš/uz/failu") val requestFile = file.asRequestBody("multipart/form-data".toMediaTypeOrNull()) val filePart = MultipartBody.Part.createFormData("file", file.name, requestFile) // Uri gadījumā val uri = Uri.parse("...") // iegūstam 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", "faila_vards", requestBody)"file"nosaukumscreateFormDatajāatbilst servera prasībām. -
Citu daļu RequestBody izveide: Ja nepieciešams sūtīt citus datus (teksts, skaitļi), izmantojiet
RequestBody.val description = "Faila apraksts".toRequestBody("text/plain".toMediaTypeOrNull()) -
Pieprasījuma izpilde: Izsauciet Retrofit interfeisa metodi, nododot izveidotās daļas.
// Injektējam vai iegūstam FileApi instanci val api: FileApi = ... // Korutī vai citā asinhronā kontekstā try { val descriptionPart = "Manu failu".toRequestBody("text/plain".toMediaTypeOrNull()) val fileToUpload = File("ceļš/uz/failu") 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) { // Fails veiksmīgi augšupielādēts } else { // Kļūdas apstrāde } } catch (e: Exception) { // Izņēmuma apstrāde }
Papildu aspekti:
- Augšupielādes progresu: var ieviest
RequestBodyar progresu uzraudzību, lai rādītu augšupielādes indikatoru. - Lieli faili: ļoti lieliem failiem apsveriet straumēšanu vai sadalīšanu daļās.
- Kļūdu apstrāde: pārbaudiet servera atbildes kodus un apstrādājiet tīkla kļūdas.
- Atļaujas: pārliecinieties, ka lietotnei ir atļauja lasīt failus (
READ_EXTERNAL_STORAGE) vecākās Android versijās. - ViewModel/Repository: faila augšupielādes loģiku novietojiet repozitorijā vai ViewModel, lai uzlabotu arhitektūru.
- WorkManager: izmantojiet fonā notiekošai augšupielādei, kas turpinās pat, ja lietotne ir aizvērta.
MultipartBody priekšrocības:
- Standarta veids failu sūtīšanai ar papildu datiem.
- Pārklāts ar lielāko daļu servera karkasu.
- Labs integrācija ar Retrofit.
Tas ir uzticams un plaši izmantots pieejas veids failu augšupielādei Android platformā.