kotlin - 如何使用 Chopper 发送文件?

标签 kotlin flutter dart retrofit2 chopper

在我的 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 将其作为文件传递给服务器?

任何人?

最佳答案

查看 Chopper 的文档,PartFile注解支持三种数据类型:

  • List<int>
  • String (path of your file)
  • MultipartFile (from package:http)


您当前正在使用 String ,但由于未知原因,它对您不起作用。第一个选项可能是最直接的,但第三个选项与您目前在 Retrofit 中的最相似,因此我们可以尝试一下。

import 'package:http/http.dart';

...

Future<Response> createPlan(BuildContext context, String name, String path) async {
  Response response;
  try {
    final bytes = (await File(path).readAsBytes()).toList();
    final file = MultipartFile.fromBytes('image', bytes);
    response = await _service.createPlan(
      name,
      file,
    );
    return response;
  } catch (e) {
    rethrow;
  }
}

服务

@Post(path: "create_plan")
@multipart
Future<Response> createPlan(
  @Field('name') String name,
  @PartFile('image') MultipartFile image,
);

关于kotlin - 如何使用 Chopper 发送文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59988978/

相关文章:

java - 我如何在 ARCore 中调整对象的大小?

flutter - 如果服务器无法访问,如何显示错误

java - Kotlin 扩展冲突

arrays - 访问混合8/16/32位字的好方法

android - Kotlin 和 Android 数据绑定(bind)

twitter-bootstrap - 在 Bootstrap Popover 中通过 Dart web-ui 进行数据绑定(bind)

flutter - 在 flutter 中制作自定义弯曲应用栏的更好方法

android - Flutter应用程式正在Android模拟器上执行,但未在实体装置(OnePlus 7T)上执行

android - 由于后台位置权限,应用程序在 Play 商店被拒绝

dart - 无法删除 Wrap 小部件上的垂直填充或边距