【发布时间】:2020-05-16 05:49:56
【问题描述】:
在我的 kotlin 项目中,我使用 retrofit,它运行良好。
suspend fun createPlan(
context: Context?,
name: String,
file: File?
): ABC? {
val fileSignImage = file?.let {
MultipartBody.Part.createFormData(
"image",
it.getName(),
RequestBody.create("image/*".toMediaTypeOrNull(), it)
)
}
return RetrofitFactory.apiCall(context) {
RetrofitFactory.makeRetrofitService().createPlan(
name.toRequestBody("text/plain".toMediaTypeOrNull()),
fileSignImage
)
}}
改造服务
@Multipart
@POST("create_plan")
fun createPlan(
@Part("name") name: RequestBody,
@Part image: MultipartBody.Part?
): Deferred<Response<WebApiResponse.ABCs>>
如果我想使用Chopper,正确的方法是什么?
这是我尝试过的
Future<Response> createPlan(
BuildContext context, String name,String path) async {
Response response;
try {
response = await _service.createPlan(
name,path);
return response;
} catch (e) {
rethrow;
}
}
服务
@Post(path: "create_plan")
@multipart
Future<Response> createPlan(
@Field('name') String name,@PartFile('image') String imagePath);
如何将 imagePath 转换为文件,以便使用 Chopper 将其作为文件传递给服务器?
有人吗?
【问题讨论】:
-
你已经显示了代码sn-ps,但是你没有提到问题是什么,所以没人能回答。您是否尝试过运行该代码?你有任何例外吗?请求没有发送吗?服务器没有收到请求吗?请求不包含您的期望吗?什么问题???
-
@Ovidiu 我想将文件而不是字符串传递给服务器。
-
你的服务器是在接收一个字符串,还是你只是假设你正在发送一个字符串?在尝试运行该代码 sn-p 时,您再次没有描述问题是什么(至少没有任何技术证明,例如异常或奇怪的请求正文)。您正在使用一种受支持的数据类型:github.com/lejard-h/chopper/blob/master/chopper/lib/src/… 什么不起作用???
-
@Ovidiu 服务器端不应接受
String。在我的 kotlin 代码中,我实际上将MultipartBody.Part传递给服务器,一切正常。但在颤抖中,它失败了。我不能告诉你错误是什么,因为错误是从服务器端返回的。我猜是因为我将其传递为String,而不是MultipartBody.Part? -
你的意思是你不能告诉错误是什么,因为它是由服务器返回的?以及您如何期望任何人在不指定错误的情况下帮助您?
标签: kotlin flutter dart retrofit2 chopper