You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制Flutter用户仅上传当日拍摄的视频?

问题解答

ImagePicker包没有直接限制仅选择当日视频的参数,你需要通过获取视频文件的元数据来手动校验拍摄日期。

实现步骤

  • 调用picker.pickVideo获取视频文件后,通过XFile的路径读取文件元数据
  • 解析元数据中的拍摄日期,与当前日期对比,不符合则提示用户

代码示例

import 'dart:io';
import 'package:image_picker/image_picker.dart';
import 'package:exif/exif.dart'; // 需要添加exif包到pubspec.yaml

Future<void> pickValidVideo() async {
  final picker = ImagePicker();
  final XFile? file = await picker.pickVideo(source: ImageSource.gallery);
  
  if (file == null) return;

  // 读取视频文件的元数据
  final fileBytes = await File(file.path).readAsBytes();
  final exifData = await readExifFromBytes(fileBytes);

  // 提取拍摄日期(兼容不同设备的元数据键)
  String? dateString;
  if (exifData.containsKey('DateTimeOriginal')) {
    dateString = exifData['DateTimeOriginal']!.printable;
  } else if (exifData.containsKey('DateTime')) {
    dateString = exifData['DateTime']!.printable;
  }

  if (dateString == null) {
    print('无法获取视频拍摄日期,请选择其他视频');
    return;
  }

  // 解析日期并校验是否为当日
  final takenDate = DateTime.parse(dateString.replaceAll(':', '-', 2));
  final today = DateTime.now();
  final isToday = takenDate.year == today.year &&
      takenDate.month == today.month &&
      takenDate.day == today.day;

  if (!isToday) {
    print('只能上传今日拍摄的视频');
    return;
  }

  // 校验通过,后续处理视频文件
  print('视频符合要求,路径:${file.path}');
}

注意事项

  • 需要在pubspec.yaml中添加依赖:exif: ^3.1.0(版本可按需调整)
  • 部分老旧视频或特殊格式文件可能不包含拍摄日期元数据,需提前做兼容处理
  • 不同设备的元数据键可能存在差异,建议多保留几种判断逻辑

内容的提问来源于stack exchange,提问作者Tony M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 09:19:58