Middle
Kuidas te implementiksite failide üleslaadimise serverirakendusse?
sobes.tech AI
Vastus AI-lt
Failide üleslaadimiseks kasutaksin mahtuvuslikku keha (MultipartBody) Retrofit raamatukogust.
-
API-liidese ettevalmistamine: Loome liidese anotatsioonidega
@Multipartja@POST. Meetod võtab@Partfailile ja teistele osa, kui neid on.interface FileApi { @Multipart @POST("/upload") suspend fun uploadFile( @Part file: MultipartBody.Part, @Part("description") description: RequestBody? = null ): Response<ResponseBody> } -
MultipartBody.Part loomine: Muudame
FilevõiUriRequestBody-ks ja seejärelMultipartBody.Part-ks.// Faili jaoks val file = File("tee/failini") val requestFile = file.asRequestBody("multipart/form-data".toMediaTypeOrNull()) val filePart = MultipartBody.Part.createFormData("file", file.name, requestFile) // Uri jaoks val uri = Uri.parse("...") // saame 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", "faili_nimi", requestBody)"file"nimicreateFormData-s peab vastama serveri ootustele. -
Muude osade RequestBody loomine: Kui vaja saata teisi andmeid (tekst, numbrid), kasutage
RequestBody.val description = "Faili kirjeldus".toRequestBody("text/plain".toMediaTypeOrNull()) -
Päringu täitmine: Kutsuge välja Retrofit liidese meetod, edastades loodud osad.
// Injekteeri või saa FileApi eksemplar val api: FileApi = ... // Korutinas või muus asünkroonses kontekstis try { val descriptionPart = "Minu fail".toRequestBody("text/plain".toMediaTypeOrNull()) val fileToUpload = File("tee/failini") 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) { // Fail on edukalt üles laaditud } else { // Käsitle viga } } catch (e: Exception) { // Väljaheite käsitlemine }
Täiendavad aspektid:
- Üleslaadimise progress: saab rakendada
RequestBodykoos progressi jälgimisega, et näidata laadimisindikaatorit. - Suured failid: kaaluda voogedastust või jagamist osadeks.
- Vigade käsitlemine: kontrollige serveri vastuse koode ja käsitlege võrguvigu.
- Luba: veenduge, et rakendil on luba failide lugemiseks (
READ_EXTERNAL_STORAGE) vanemates Androidi versioonides. - ViewModel/Repository: laadimisloogika asetada repository või ViewModel-isse parema arhitektuuri jaoks.
- WorkManager: kasutada taustal laadimiseks, mis peab jätkuma isegi kui rakendus on suletud.
MultipartBody eelised:
- Standardne viis failide saatmiseks koos lisanduvate andmetega.
- Toetab enamik serveriraamistikke.
- Hea integreerimine Retrofit-iga.
See on usaldusväärne ja laialdaselt kasutatav lähenemisviis failide üleslaadimiseks Androidis.