Чӣ гуна шумо боргирии файлҳоро ба барномаи серверӣ татбиқ мекунед?
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табдил медиҳем.// Барои File 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бо пайгирии пешрафт, барои нишон додани нишондиҳандаи боргузорӣ. - Файлҳои калон: Барои файлҳои хеле калон, ба назар гирифтани стриминг ё тақсим кардан ба қисмҳо.
- Коркарди хато: Санҷидани кодҳои ҷавоби сервер ва коркарди хатоҳои шабакавӣ.
- Иртиботҳо: Боварӣ ҳосил кунед, ки барнома иҷозат дорад, ки файлҳоро бихонад (
READ_EXTERNAL_STORAGE) дар версияҳои кӯҳнаи Android. - ViewModel/Repository: Логикаи боргузории файлро дар repository ё ViewModel ҷойгир кунед барои сохтори беҳтар.
- WorkManager: Барои боргузории пасзамина истифода баред, ки ҳатто агар барнома баста шавад, идома ёбад.
Афзалиятҳои MultipartBody:
- Равиши стандартӣ барои фиристодани файлҳо бо маълумоти иловагӣ.
- Дар бештари серверҳо дастгирӣ мешавад.
- Бо Retrofit хуб ҳамгиро мешавад.
Ин як рӯйхати боэътимод ва васеъ истифодашаванда барои боргузории файлҳо дар Android мебошад.