如何在Flutter中从base64字符串获取文件扩展名|镖
How to get file extension from base64 String in Flutter | Dart
我有一个来自 api 的文档的 base64 字符串。我想知道那是哪种 extension/file 格式。因为如果它在 jpg/jpeg/png 中,我想在图像小部件中显示它。或者,如果它是 pdf 格式,我想在 PdfView 小部件中显示它。那么有没有办法从base64获取文件扩展名。有配套吗?
如果您有 base64 字符串,您可以通过检查 base64 字符串的第一个字符来检测文件类型:
'/' 表示 jpeg。
'i'表示png。
'R'表示gif。
'U'表示webp.
'J'表示PDF。
我为此编写了一个函数:
String getBase64FileExtension(String base64String) {
switch (base64String.characters.first) {
case '/':
return 'jpeg';
case 'i':
return 'png';
case 'R':
return 'gif';
case 'U':
return 'webp';
case 'J':
return 'pdf';
default:
return 'unknown';
}
}
如果您没有原始文件名,就无法恢复它。那是不属于文件内容的元数据,base64 编码仅对文件内容起作用。最好能保存原文件名
如果不行,可以用package:mime
to guess the MIME type of the file from a small amount of binary data. You could decode the first n×4 characters from the base64 string (a valid base64 string must have a length that's a multiple of 4), decode it, and call lookupMimeType
。
package:mime
有一个 defaultMagicNumbersMaxLength
值,您可以使用该值动态计算 n:
import 'dart:convert';
import 'package:mime/mime.dart' as mime;
String? guessMimeTypeFromBase64(String base64String) {
// Compute the minimum length of the base64 string we need to decode
// [mime.defaultMagicNumbersMaxLength] bytes. base64 encodes 3 bytes of
// binary data to 4 characters.
var minimumBase64Length = (mime.defaultMagicNumbersMaxLength / 3).ceil() * 4;
return mime.lookupMimeType(
'',
headerBytes: base64.decode(base64String.substring(0, minimumBase64Length)),
);
}
对于 package:mime
支持的类型,mime.defaultMagicNumbersMaxLength
是 12(这意味着需要解码 base64 字符串的前 16 个字节)。
我有一个来自 api 的文档的 base64 字符串。我想知道那是哪种 extension/file 格式。因为如果它在 jpg/jpeg/png 中,我想在图像小部件中显示它。或者,如果它是 pdf 格式,我想在 PdfView 小部件中显示它。那么有没有办法从base64获取文件扩展名。有配套吗?
如果您有 base64 字符串,您可以通过检查 base64 字符串的第一个字符来检测文件类型:
'/' 表示 jpeg。
'i'表示png。
'R'表示gif。
'U'表示webp.
'J'表示PDF。
我为此编写了一个函数:
String getBase64FileExtension(String base64String) {
switch (base64String.characters.first) {
case '/':
return 'jpeg';
case 'i':
return 'png';
case 'R':
return 'gif';
case 'U':
return 'webp';
case 'J':
return 'pdf';
default:
return 'unknown';
}
}
如果您没有原始文件名,就无法恢复它。那是不属于文件内容的元数据,base64 编码仅对文件内容起作用。最好能保存原文件名
如果不行,可以用package:mime
to guess the MIME type of the file from a small amount of binary data. You could decode the first n×4 characters from the base64 string (a valid base64 string must have a length that's a multiple of 4), decode it, and call lookupMimeType
。
package:mime
有一个 defaultMagicNumbersMaxLength
值,您可以使用该值动态计算 n:
import 'dart:convert';
import 'package:mime/mime.dart' as mime;
String? guessMimeTypeFromBase64(String base64String) {
// Compute the minimum length of the base64 string we need to decode
// [mime.defaultMagicNumbersMaxLength] bytes. base64 encodes 3 bytes of
// binary data to 4 characters.
var minimumBase64Length = (mime.defaultMagicNumbersMaxLength / 3).ceil() * 4;
return mime.lookupMimeType(
'',
headerBytes: base64.decode(base64String.substring(0, minimumBase64Length)),
);
}
对于 package:mime
支持的类型,mime.defaultMagicNumbersMaxLength
是 12(这意味着需要解码 base64 字符串的前 16 个字节)。