Так что я не могу загрузить изображение на сервер.Если я удаляю параметр изображения, все работает, но когда я передаю параметр изображения, он загружает любые данные, фактически сервер не получает запрос.
ViewModel
fun updateProfile() {
val student = student.value!!
// Has Map of all the fields
val map = HashMap<String, @JvmSuppressWildcards RequestBody>()
map["name"] = RequestBody.create(MediaType.parse("multipart/form-data"), student.name)
map["university"] = RequestBody.create(MediaType.parse("multipart/form-data"), student.university)
map["phoneNumber"] = RequestBody.create(MediaType.parse("multipart/form-data"), student.phoneNumber)
map["password"] = RequestBody.create(MediaType.parse("multipart/form-data"), student.password)
studentRepository.updateProfile(map, profilePhoto)
}
fun updateFile(path: Uri) {
val file = File(path.path)
Log.e("file", file.absolutePath)
val reqFile = RequestBody.create(MediaType.parse("multipart/form-data"), file)
profilePhoto = MultipartBody.Part.createFormData("photo", file.name, reqFile)
}
profilePhoto
- это изображение, которое необходимо загрузить на сервер.
Фрагмент
override fun onActivityResult(requestCode: Int, resultCode: Int, imageReturnedIntent: Intent?) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent)
// If user presses back button without choosing an image
if (imageReturnedIntent == null) {
return
}
val selectedImage = imageReturnedIntent.data
//userAvatar.setImageURI(selectedImage)
userAvatar.load(selectedImage) {
transformations(arrayListOf(CircleCropTransformation()))
crossfade(true)
}
viewModel.updateFile(selectedImage!!)
}
Вот часть фрагмента, которая вызывает ViewModelфункция для подготовки изображения.
Интерфейс
@Multipart
@PATCH("students/profile/update")
fun updateProfile(@PartMap param: Map<String, @JvmSuppressWildcards RequestBody>, @Part photo: MultipartBody.Part): Call<Void>
Репозиторий
fun updateProfile(param: Map<String, @JvmSuppressWildcards RequestBody>, image: MultipartBody.Part): LiveData<Response<Void>> {
client.updateProfile(param, image).enqueue(object : Callback<Void> {
override fun onFailure(call: Call<Void>, t: Throwable) {
}
override fun onResponse(call: Call<Void>, response: Response<Void>) {
voidResponse.value = response
}
})
return voidResponse
}
Когда я вызываю функцию обновленияэто пришло как журнал модернизации.
2019-09-28 00:08:55.095 13601-15993/com.appname.app D/OkHttp: --> PATCH http://192.168.1.5:8080/students/profile/update
2019-09-28 00:08:55.095 13601-15993/com.appname.app D/OkHttp: Content-Type: multipart/form-data; boundary=5c90756d-997d-4831-b53f-da341ec44f3a
2019-09-28 00:08:55.096 13601-15993/com.appname.app D/OkHttp: Content-Length: 1055
2019-09-28 00:08:55.096 13601-15993/com.appname.app D/OkHttp: Accept: application/json
2019-09-28 00:08:55.096 13601-15993/com.appname.app D/OkHttp: Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InZhcnVuY3I3cmFqQGdtYWlsLmNvbSIsImV4cCI6MTU2OTYwOTQ3M30.yy2ZeKluZxT_mARz3aUbgHzwkAMzfCZAreOCiuiygIg
Может кто-нибудь помочь мне, что случилось?Спасибо.