如何将图片以字符串格式发送给API?这是在多部分文件实例中发送数据但data['avatar']接受字符串的代码.那么我该怎么做呢?请帮我拿一下这个.

static Future<Response> updateUserAccount({
    XFile? avatar,
    String? fullName,
    String? email,
    String? oldPhone,
    String? phone,
    String? city,
    String? streetName,
    String? landmark,
    String? oldPassword,
    String? password,
  }) async {
    final dio = Dio();
    String token = await SecureStorageUtils.getToken();
    dio.options.headers['accept'] = '*/*';
    dio.options.headers['content-type'] = 'multipart/form-data';
    dio.options.headers['authorization'] = 'Bearer $token';
    Map<String, dynamic> data = {};
    if (avatar != null) {
      data['avatar'] = await MultipartFile.fromFile(avatar.path);
    }

    if (email != null) {
      data['email'] = email;
    }

    if (oldPhone != null) {
      data['old_phone_number'] = oldPhone;
    }

    if (phone != null) {
      data['phone_number'] = phone;
    }

    if (city != null || streetName != null || landmark != null) {
      final address = {};

      if (city != null) {
        address['city'] = city;
      }

      if (streetName != null) {
        address['street_name'] = streetName;
      }

      if (landmark != null) {
        address['landmark'] = landmark;
      }
      data['address'] = address;
    }

    if (oldPassword != null) {
      data['old_password'] = oldPassword;
    }
    if (password != null) {
      data['password'] = password;
    }
    if (fullName != null) {
      data['full_name'] = fullName;
    }
    print("data: $data");

    FormData formData = FormData.fromMap(data);

    final response = await dio.patch(
      AppUrl.currentUser,
      data: formData,
    );
    return response;
  }

我使用Base64Endingtry 了这种方法,但它不起作用.

List<int> fileBytes = await avatar.readAsBytes();
  String base64Avatar = base64Encode(fileBytes);
  data['avatar'] = base64Avatar;

推荐答案

在我的情况下,我可以发送json数据,因为数据是字符串文件,所以我创建了一个创建Base64的类,例如

class ToImageData {
  static String imagetoData(String? imagepath) {
    final extension = path.extension(
      imagepath!.substring(imagepath.lastIndexOf("/")).replaceAll("/", ""),
    );
    final bytes = File(imagepath).readAsBytesSync();
    String base64 =
        "data:image/${extension.replaceAll(".", "")};base64,${base64Encode(bytes)}";
    return base64;
  }
}

所以每当我必须用json发送文件时,因为我这样称呼它

 // Lets make an example
 final data = {
     "avatar": ToImageData.imagetoData(file.path);
     // result is like this data:image/png;base64,TEWUFDBSJWEH1232347GHSD
    //something long text
 }

final response = await dio.patch(
      AppUrl.currentUser,
      data: data ,
    );
    return response;

我希望这对你有帮助.

Flutter相关问答推荐

如何刷新future 的构建器时,没有OBS变量的内部在Ffltter?

SingleChildScrollView正在将Container的高度限制为子对象,尽管使用了Expanded Inside Row()

摆动如何更改弹出菜单项高亮显示 colored颜色 半径

如何将Will POP示波器转换为POP数据抖动的POP示波器

GitHub Actions工作流secret中的特殊字符未被保留

为什么我的页面控制器在使用Riverpod时没有更改我的页面视图?

Android Studio扩展控件上未加载Google map

Flutter :执行com.android.build.gradle.internal.tasks.MergeNativeLibsTask$MergeNativeLibsTaskWorkAction时出现故障

在Flutter 小部件测试中找不到框中的AssetImage装饰

dart /长笛中的返回早期模式和拆分方法

使用 forLoops 在 Dart 中进行单元测试会返回 stackoverflow

如何从flutter连接PostgreSQL数据库?

网页浏览器不支持鼠标滚动的行项目

Flutter底部面板局部显示

转换函数上传文件上传Uint8List

我在弹出框中编辑后无法保存日期

如何在 flutter 中过滤 DateTime(intl)?

为什么容器会填满整个空间?

Firebase Cloud Messaging (Flutter):订阅主题时出现错误消息

如何在Flutter 中制作自定义微调器?