我在找一个能识别文件类型的软件包。举个例子
final path = "/some/path/to/file/file.jpg";
应被识别为图像或
final path = "/some/path/to/file/file.doc";
应被视为文件
jhiyze9q1#
您可以使用mime package from the Dart team从文件名中提取MIME types:
mime
import 'package:mime/mime.dart'; final mimeType = lookupMimeType('/some/path/to/file/file.jpg'); // 'image/jpeg'
如果你想知道一个文件 path 是否代表一个image,你可以创建一个这样的函数:
import 'package:mime/mime.dart'; bool isImage(String path) { final mimeType = lookupMimeType(path); return mimeType.startsWith('image/'); }
同样,如果你想知道 path 是否代表document,你可以写一个这样的函数:
import 'package:mime/mime.dart'; bool isDocument(String path) { final mimeType = lookupMimeType(path); return mimeType == 'application/msword'; }
您可以找到MIME类型at IANA的列表或查看mime包中的扩展Map。
使用mime包,您甚至可以检查文件的头字节:
final mimeType = lookupMimeType('image_without_extension', headerBytes: [0xFF, 0xD8]); // jpeg
xzlaal3s2#
不需要任何扩展。你可以试试下面的代码片段。
String getFileExtension(String fileName) { return "." + fileName.split('.').last; }
67up9zun3#
如果你认为你应该看看path package,特别是extension method。您可以获得文件格式,而无需向pubspec.yaml中添加更多的包;)
context.extension('foo.bar.dart.js', 2); // -> '.dart.js context.extension('foo.bar.dart.js', 3); // -> '.bar.dart.js' context.extension('foo.bar.dart.js', 10); // -> '.bar.dart.js' context.extension('path/to/foo.bar.dart.js', 2); // -> '.dart.js'
tvokkenx4#
如果文件名包含扩展名,则使用以下代码:
import 'package:mime/mime.dart'; File file = getFile(); // use any filepicker final mimeType = lookupMimeType(file.path);
如果文件名没有扩展名,则用途:
var dataHeader = await file.readAsBytes(); mimeType = lookupMimeType(file.path, headerBytes: dataHeader);
完整代码:
String? mimeType = lookupMimeType(file!.path); if(mimeType == null) { var dataHeader = await file.readAsBytes(); mimeType = lookupMimeType(file!.path, headerBytes: dataHeader); }
4条答案
按热度按时间jhiyze9q1#
您可以使用
mime
package from the Dart team从文件名中提取MIME types:Helper函数
如果你想知道一个文件 path 是否代表一个image,你可以创建一个这样的函数:
同样,如果你想知道 path 是否代表document,你可以写一个这样的函数:
您可以找到MIME类型at IANA的列表或查看
mime
包中的扩展Map。来自文件头
使用
mime
包,您甚至可以检查文件的头字节:xzlaal3s2#
不需要任何扩展。你可以试试下面的代码片段。
67up9zun3#
如果你认为你应该看看path package,特别是extension method。
您可以获得文件格式,而无需向pubspec.yaml中添加更多的包;)
tvokkenx4#
如果文件名包含扩展名,则使用以下代码:
如果文件名没有扩展名,则用途:
完整代码: