无法将来自 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);
感谢您的帮助!
我在 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);
感谢您的帮助!