dart 如何获取文件类型?

clj7thdc  于 2023-05-26  发布在  其他
关注(0)|答案(4)|浏览(209)

我在找一个能识别文件类型的软件包。举个例子

final path = "/some/path/to/file/file.jpg";

应被识别为图像或

final path = "/some/path/to/file/file.doc";

应被视为文件

jhiyze9q

jhiyze9q1#

您可以使用mime package from the Dart team从文件名中提取MIME types

import 'package:mime/mime.dart';

final mimeType = lookupMimeType('/some/path/to/file/file.jpg'); // 'image/jpeg'

Helper函数

如果你想知道一个文件 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
xzlaal3s

xzlaal3s2#

不需要任何扩展。你可以试试下面的代码片段。

String getFileExtension(String fileName) {
 return "." + fileName.split('.').last;
}
67up9zun

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'
tvokkenx

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);
}

相关问题