【问题标题】:How to upload a video picked from user into firebase?如何将用户挑选的视频上传到firebase?
【发布时间】:2021-07-06 18:01:24
【问题描述】:

我正在尝试将视频上传到 firebase。但是有一个问题,我上传的视频越多,视频需要的空间就越大。我只同时上传一个视频。该视频是从用户中挑选出来的。当用户选择第一个视频并且视频持续时间约为 2 秒时,它会非常快速地上传。然后在接下来的 2 或 3 秒持续时间上,它需要比第一个多一点的时间,但仍然可以。然后就像4视频一样,它需要非常多的时间。而视频又是 2 或 3 秒的录制,但存储像 13 分钟。我不明白为什么。仅当我使用新的 android 模拟器时才能解决此问题。当我从firebase中删除所有数据并喜欢将第一个视频录制到其中时,它不在乎。 希望任何人都可以举例说明为什么会发生此错误。 这是我的代码

final allvideos = FirebaseStorage.instance.ref().child('allvideos');

  final allimages = FirebaseStorage.instance.ref().child('allimages');
uploadVideo() async {
    setState(() {
      isuploading = true;
    });
    try {
      var firebaseuseruid = FirebaseAuth.instance.currentUser.uid;
      DocumentSnapshot userdoc = await FirebaseFirestore.instance
          .collection('meinprofilsettings')
          .doc(firebaseuseruid)
          .get();
      var alldocs = await FirebaseFirestore.instance.collection('videos').get();
      int length = alldocs.docs.length;
      String videourl = await uploadvideotostorage("Video $length");
      String previewimage = await uploadimagetostorage("Video $length");
      FirebaseFirestore.instance.collection('videos').doc("Video $length").set({
        'username': userdoc.data()['username'],
        'uid': firebaseuseruid,
        'profilepic': userdoc.data()['url'],
        'id':"Video $length",
        'likes': [],
        'commentcount': 0,
        'sharecount': 0,
        'hashtag1': hashtagcontroller.text,
        'hashtag2': hashtagcontroller2.text,
        'hashtag3': hashtagcontroller3.text,
        'videourl': videourl,
        'previewimage': previewimage,
        'ratings': [],

      });
      Navigator.pop(context);
    } catch (e) {
      print(e.toString());
    }
  }
}


这是我上传的方式 图片用于预览图片

getpreviewimage() async {
    final previewimage = await flutterVideoCompress.getThumbnailWithFile(
      widget.videopath_asstring,
    );
    return previewimage;
  }

  compressvideo() async {
    if (widget.imageSource == ImageSource.gallery) {
      return widget.videofile;
    } else {
      final compressvideo = await flutterVideoCompress.compressVideo(
          widget.videopath_asstring,
          quality: VideoQuality.MediumQuality);
      return File(compressvideo.path);
    }
  }

  uploadvideotostorage(String id) async {
    final video = await allvideos.child(id).putFile(await compressvideo());
    String url = await video.ref.getDownloadURL();
    return url;
  }

  uploadimagetostorage(String id) async {
    final video = await allimages.child(id).putFile(await getpreviewimage());
    String url = await video.ref.getDownloadURL();
    id=url;
    return url;
  }

【问题讨论】:

  • 这是在同一会话期间发生的吗?例如,如果您现在上传了两个视频,然后关闭了应用程序,当您再次打开它并尝试再上传 12 个视频时,会发生快还是慢?终止应用程序怎么办?也在物理设备上?如果您还没有尝试过物理设备,我建议您先尝试并进行比较。
  • 好的,它在真实设备上尝试过,它似乎可以工作。但是当我删除一个视频(如 theresVideo0、Video1、Video 2、Video3 和我删除视频 1 时)仍然存在错误。然后在最后一个上传一个新的视频,因此视频 3 被覆盖,然后上传一个新的视频 3 再次被覆盖.你知道汤姆是怎么解决的吗?
  • 如果它被覆盖,您可能在新旧视频中使用相同的名称。
  • 兄弟当我删除像第 2 个视频(如 4 个最新的第 2 个视频)时出现的问题一次又一次地被覆盖,这意味着获取所有数据的长度无法正常工作,因为我试图使用无论如何设置id的另一种方法。哪一个 。它只是每次都必须是另一个ID
  • 所以请帮帮我,我真的卡住了 3 天

标签: flutter google-cloud-firestore file-upload firebase-storage


【解决方案1】:

使用类似的东西来生成你的随机 ID:

import 'dart:math';
import 'package:intl/intl.dart';

String generateId() {
  int randomNumber = Random().nextInt(9999999);
  String now = DateTime.now().millisecondsSinceEpoch.toString().substring(7);
  String formatted = DateFormat('MMdh').format(DateTime.now());
  return randomNumber.toString() + formatted + now;
}

将您的上传功能更改为如下所示:

  Future<String> uploadvideotostorage(String id) async {
    final video = await allvideos.child(id).putFile(await compressvideo());
    String url = await video.ref.getDownloadURL();
    return url;
  }

当您创建视频时,为其分配一个随机 ID,如下所示:

String randomlyGeneratedId = generateId();

最后,获取您的下载 URL:

String finalVideoURL = await uploadvideotostorage(randomlyGeneratedId);

【讨论】:

  • 是的,兄弟,谢谢你解决了这个问题,但我怎样才能输入字母表让它更随机?
  • 不客气,这是生成a random string 的绝佳答案。如果对您有所帮助,请考虑将其标记为您问题的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
  • 2020-09-07
  • 2015-10-07
  • 2011-03-11
  • 2020-08-16
  • 2020-10-29
  • 2012-01-08
相关资源
最近更新 更多