使用 Retrofit2 上传图像(PATCH 请求)
Upload image using Retrofit2 (PATCH Request)
我知道如何使用 POST 请求将图像上传到服务器:
// AuthService.kt
@Multipart
@POST("auth/update")
fun updateInfo(
@Header("Authorization") token: String,
@Part("fullName") fullName: RequestBody,
@Part("address") address: RequestBody,
@Part avatarPic: MultipartBody.Part?
)
// Activity
val file = File(...
val reqFile = RequestBody.create(MediaType.parse("image/*"), file)
val avatarPic = MultipartBody.Part.createFormData("avatarPic", file.name, reqFile)
val fullName = RequestBody.create(MediaType.parse("text/plain"), "Saman")
val address = RequestBody.create(MediaType.parse("text/plain"), "Malekan")
authService.updateInfo(token, fullName, address, avatarPic)...
我想使用 PATCH 方法发送此请求,但我不能。我似乎不识别字段。我怎样才能做到这一点?
我自己找到了解决方案。
我通过 "Method Spoofing"
发送请求。我刚刚将 AuthService.kt
中的方法更改为:
@Multipart
@POST("auth/update")
fun updateInfo(
@Header("Authorization") token: String,
@Part("fullName") fullName: RequestBody,
@Part("address") address: RequestBody,
@Part avatarPic: MultipartBody.Part?,
@Part("_method") method: RequestBody = RequestBody.create(MediaType.parse("text/plain"), "PATCH")
)
请求中的_method
字段导致作为请求的服务器作为PATCH
请求。
我知道如何使用 POST 请求将图像上传到服务器:
// AuthService.kt
@Multipart
@POST("auth/update")
fun updateInfo(
@Header("Authorization") token: String,
@Part("fullName") fullName: RequestBody,
@Part("address") address: RequestBody,
@Part avatarPic: MultipartBody.Part?
)
// Activity
val file = File(...
val reqFile = RequestBody.create(MediaType.parse("image/*"), file)
val avatarPic = MultipartBody.Part.createFormData("avatarPic", file.name, reqFile)
val fullName = RequestBody.create(MediaType.parse("text/plain"), "Saman")
val address = RequestBody.create(MediaType.parse("text/plain"), "Malekan")
authService.updateInfo(token, fullName, address, avatarPic)...
我想使用 PATCH 方法发送此请求,但我不能。我似乎不识别字段。我怎样才能做到这一点?
我自己找到了解决方案。
我通过 "Method Spoofing"
发送请求。我刚刚将 AuthService.kt
中的方法更改为:
@Multipart
@POST("auth/update")
fun updateInfo(
@Header("Authorization") token: String,
@Part("fullName") fullName: RequestBody,
@Part("address") address: RequestBody,
@Part avatarPic: MultipartBody.Part?,
@Part("_method") method: RequestBody = RequestBody.create(MediaType.parse("text/plain"), "PATCH")
)
请求中的_method
字段导致作为请求的服务器作为PATCH
请求。