如何获取文件类型?

del*_*min 11 dart flutter

我正在尝试找到一个可以识别文件类型的包。例如

final path = "/some/path/to/file/file.jpg";
Run Code Online (Sandbox Code Playgroud)

应该被识别为图像或

final path = "/some/path/to/file/file.doc";
Run Code Online (Sandbox Code Playgroud)

应该被识别为文件

cre*_*not 22

您可以使用mimeDart 团队从文件名中提取MIME 类型

import 'package:mime/mime.dart';

final mimeType = lookupMimeType('/some/path/to/file/file.jpg'); // 'image/jpeg'
Run Code Online (Sandbox Code Playgroud)

辅助函数

如果你想知道一个文件路径是否代表一个图像,你可以创建一个这样的函数:

import 'package:mime/mime.dart';

bool isImage(String path) {
  final mimeType = lookupMimeType(path);

  return mimeType.startsWith('image/');
}
Run Code Online (Sandbox Code Playgroud)

同样,如果你想知道一个路径是否代表一个文档,你可以写一个这样的函数:

import 'package:mime/mime.dart';

bool isDocument(String path) {
  final mimeType = lookupMimeType(path);

  return mimeType == 'application/msword';
}
Run Code Online (Sandbox Code Playgroud)

您可以在 IANA找到 MIME 类型列表或查看中的扩展映射mime

从文件头

使用该mime包,您甚至可以检查文件的头字节:

final mimeType = lookupMimeType('image_without_extension', headerBytes: [0xFF, 0xD8]); // jpeg
Run Code Online (Sandbox Code Playgroud)

  • 0xFF、0xD8 是做什么用的? (2认同)
  • 但它不支持很多 mime 类型,例如 HEIC 或 BMP。 (2认同)

Yas*_*ash 11

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

String getFileExtension(String fileName) {
    return ".${fileName.split('.').last}".toLowerCase();
}
Run Code Online (Sandbox Code Playgroud)