file_utils.dart 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. class FileUtils {
  2. // 支持的图片格式列表
  3. static const imageExtensions = [
  4. 'jpg', 'jpeg', 'png', 'gif', 'webp',
  5. 'bmp', 'tiff', 'svg', 'heic', 'heif'
  6. ];
  7. // 支持的文档格式列表
  8. static const documentExtensions = [
  9. 'pdf', 'doc', 'docx', 'xls', 'xlsx',
  10. 'ppt', 'pptx', 'txt', 'rtf', 'csv',
  11. 'odt', 'ods', 'odp'
  12. ];
  13. // 获取 URL 的文件扩展名(小写)
  14. static String? _getFileExtension(String url) {
  15. try {
  16. // 处理带有查询参数的 URL
  17. final uri = Uri.parse(url);
  18. final pathSegments = uri.pathSegments;
  19. if (pathSegments.isEmpty) return null;
  20. final fileName = pathSegments.last;
  21. final dotIndex = fileName.lastIndexOf('.');
  22. if (dotIndex == -1) return null;
  23. return fileName.substring(dotIndex + 1).toLowerCase();
  24. } catch (e) {
  25. return null;
  26. }
  27. }
  28. // 判断是否是图片
  29. static bool isImage(String url) {
  30. final ext = _getFileExtension(url);
  31. return ext != null && imageExtensions.contains(ext);
  32. }
  33. // 判断是否是文档
  34. static bool isDocument(String url) {
  35. final ext = _getFileExtension(url);
  36. return ext != null && documentExtensions.contains(ext);
  37. }
  38. // 综合判断方法
  39. static FileType getFileType(String url) {
  40. final ext = _getFileExtension(url);
  41. if (ext == null) return FileType.unknown;
  42. if (imageExtensions.contains(ext)) return FileType.image;
  43. if (documentExtensions.contains(ext)) return FileType.document;
  44. return FileType.unknown;
  45. }
  46. }
  47. enum FileType { image, document, unknown }