无法将来自 JSON 的 Blob 转换为文件

Can't transform Blob coming from a JSON into file

我在 mySQL 上保存了一个 base64 编码的图像。当我使用 API 获取图像时,它 returns 一个 Blob:

Blob on Json

但是当我尝试获取 Blob 时,我收到错误消息:

'_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String'

该错误发生在行 base64.decode(pictureBlob) 上,因此 Blob 是一个列表。但是我怎样才能正确获得 Blob?

我用来获取 Blob 的代码:

  Future<Profile> getProfile(ModelUser user) async {
_headers['Authorization'] = "Bearer ${user.token}";

final response = await get(
    Uri.http(_options.baseUrl, '/persons/${user.id}'),
    headers: _headers);

if (response.statusCode == 200) {
  print("ui");
  Map<String, dynamic> profileMap = jsonDecode(response.body);
  var pictureBlob = profileMap['picture'];

  print(pictureBlob);
  print(base64.decode(pictureBlob));

  return Profile.fromJson(profileMap);
}

看看你的 json。通过var pictureBlob = profileMap['picture'];这条线你会得到一张地图

{
  "type" : "Buffer",
  "data" : [47, 57, ......]
}

因此要获取您需要使用的 blob 文件

//getting the blob from json
var pictureBlob = profileMap['picture']['data'];
//convert it to Uint8List
var image = base64.decode(pictureBlob);

然后将图像用作 Image.memory(image);

我已经想出如何让它在我的代码上运行。 Tipu Saltan 的回答很好但还不够:我的节点正在以字节的形式检索图像。

好的,我正在发送以 base 64 编码的图片。这没什么问题。 但是要将接收到的字节转换为图像,我需要这段代码:

    List<int> pictureData = profileMap['picture']['data'].cast<int>();
    Uint8List pictureBytes = Uint8List.fromList(pictureData);
    String pictureBase64 = new String.fromCharCodes(pictureBytes);

    profileMap['picture'] = base64Decode(pictureBase64);

感谢您的帮助!