Flatter-Firebase存储上传视频

Flatter-Firebase存储上传视频,firebase,flutter,firebase-storage,Firebase,Flutter,Firebase Storage,我想在Firebase存储中上传视频。 我试过了 Future uploadToStorage() async { try { final DateTime now = DateTime.now(); final int millSeconds = now.millisecondsSinceEpoch; final String month = now.month.toString(); final String date = now.d

我想在
Firebase存储中上传视频
。 我试过了

 Future uploadToStorage() async {
    try {
      final DateTime now = DateTime.now();
      final int millSeconds = now.millisecondsSinceEpoch;
      final String month = now.month.toString();
      final String date = now.day.toString();
      final String storageId = (millSeconds.toString() + uid);
      final String today = ('$month-$date'); 

      final file = await ImagePicker.pickVideo(source: ImageSource.gallery);

      StorageReference ref = FirebaseStorage.instance.ref().child("video").child(today).child(storageId);
      StorageUploadTask uploadTask = ref.putFile(file);

      Uri downloadUrl = (await uploadTask.future).downloadUrl;

        final String url = downloadUrl.toString();

     print(url);

    } catch (error) {
      print(error);
      }

    }
但问题是我上传了3个不同的视频。一个来自真实设备,另一个来自Ios模拟器,只有一个来自模拟器的视频被识别为类似于此图像的视频

文件:/Users/Daibaku/Library/Developer/CoreSimulator/Devices/C99406E4-12F3-480A-82A6-F6144ADD21AB/data/Containers/data/Application/23E82E18-9293-4EEB-AEEA-6A873F2F7CD7/tmp/image_picker_0B59CC5B-BB53-4019-BA8E-5F219374D8C8-7394-000006A2FA530CD0.MOV

文件: “/Users/Daibaku/Library/Developer/CoreSimulator/Devices/C99406E4-12F3-480A-82A6-F6144ADD21AB/data/Containers/data/Application/23E82E18-9293-4EEB-AEEA-6A873F2F7CD7/tmp/image_picker_F9355517-8C5C-4804-9312-69E1696CAF87-7394-000006A80D46F0B7.MOV”

这些是来自similator的文件路径,底部的一个被识别为视频。 有人知道发生了什么事以及如何解决吗? 谢谢大家!

编辑
很抱歉,图片上的最后一个是手动上传的(我从finder中放入存储器)。所以,模拟器和真实设备都不能上传视频

我算出来了。关键是您必须像这样手动指定元数据内容类型

Future uploadToStorage() async {
try {
  final DateTime now = DateTime.now();
  final int millSeconds = now.millisecondsSinceEpoch;
  final String month = now.month.toString();
  final String date = now.day.toString();
  final String storageId = (millSeconds.toString() + uid);
  final String today = ('$month-$date'); 

 final file =  await ImagePicker.pickVideo(source: ImageSource.gallery);

  StorageReference ref = FirebaseStorage.instance.ref().child("video").child(today).child(storageId);
  StorageUploadTask uploadTask = ref.putFile(file, StorageMetadata(contentType: 'video/mp4')); <- this content type does the trick

  Uri downloadUrl = (await uploadTask.future).downloadUrl;

    final String url = downloadUrl.toString();

 print(url);

} catch (error) {
  print(error);
  }

}
Future uploadToStorage()异步{
试一试{
final DateTime now=DateTime.now();
final int millSeconds=now.millsecondssinceepoch;
最后一个字符串month=now.month.toString();
最终字符串date=now.day.toString();
最终字符串storageId=(millSeconds.toString()+uid);
最终字符串today=(“$month-$date”);
最终文件=等待ImagePicker.pickVideo(来源:ImageSource.gallery);
StorageReference ref=FirebaseStorage.instance.ref().child(“视频”).child(今天).child(storageId);

StorageUploadTask uploadTask=ref.putFile(文件,StorageMetadata(contentType:'video/mp4'))你可以考虑用专用的媒体API来存储视频,而不是FixBasic存储,我在这里写过:你能把它标记为这个问题的解决方案吗?所以每个人都知道正确的答案:“对不起,我确实这么做了,谢谢你的建议:”有没有办法在颤动网络中做到这一点?我不确定。我猜FixBaseS。torage尚未为Flatter web做好准备。我们仍然需要手动传递元数据吗?我正在尝试此代码,但它在文件StorageMetadata下面显示红线