Flutter-Firebase 存储上传视频

Posted

技术标签:

【中文标题】Flutter-Firebase 存储上传视频【英文标题】:Flutter- Firebase Storage upload video 【发布时间】:2019-01-20 05:03:52 【问题描述】:

我想在Firebase Storage 上传视频。 我试过这样。

 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'

这些是来自模拟器的文件路径,底部的一个被识别为视频。 有谁知道发生了什么以及如何解决它? 谢谢!

编辑 抱歉,实际上图像上的最后一个是手动上传的(我从我的取景器中存储了)。所以,模拟器和真机都不能上传视频。

【问题讨论】:

您可以考虑使用专用媒体 api 来存储视频,而不是 firebase 存储,我在这里写过:learningsomethingnew.com/… 【参考方案1】:

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

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


【讨论】:

您能否将其标记为该问题的解决方案?所以每个人都知道正确的答案:) thx 对不起,我做了,谢谢你的建议:) 有没有办法在flutter web中做到这一点? 我不确定。我猜 Firebase 存储还没有为 Flutter Web 做好准备。 我们还需要手动传递元数据吗?我正在尝试这段代码,但它在文件下方显示红线,StorageMetadata

以上是关于Flutter-Firebase 存储上传视频的主要内容,如果未能解决你的问题,请参考以下文章

将视频上传到 Firebase 存储(未知错误)

Android - 将视频/音频文件上传到 Firebase 存储

Flutter-Firebase phone Auth 总是在 iOS 上返回 Token mismatch

如何在上传到 Firebase 存储之前压缩 Expo 中的视频?

iOS视频压缩存储至本地并上传至服务器

阿里云OSS存储桶上传视频