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

Flutter应用向Firebase Storage上传大视频文件失败求助

大视频文件上传Firebase Storage失败问题

问题背景

我在Flutter应用中尝试向Firebase Storage上传700MB的大视频文件,项目从FlutterFlow迁移而来,仍保留部分FlutterFlow功能,正逐步移除这些功能。测试上传时出现长时间加载卡顿,随后任务终止,但可以重新选择视频上传,希望解决该问题。

当前上传逻辑代码

onPressed: () async {
  final selectedMedia = await selectMedia(
    isVideo: true,
    mediaSource: MediaSource.videoGallery,
    multiImage: false,
  );
  if (selectedMedia != null && selectedMedia.every((m) =>
    validateFileFormat(
    m.storagePath, context))) {
      setState(() => _model.isDataUploading1 = true);
      var selectedUploadedFiles = <FFUploadedFile>[];

      var downloadUrls = <String>[];
      try {
      showUploadMessage(
      context,
      'Uploading file...',
      showLoading: true,
      );
      selectedUploadedFiles = selectedMedia
      .map((m) => FFUploadedFile(
      name: m.storagePath
      .split('/')
      .last,
      bytes: m.bytes,
      height: m.dimensions?.height,
      width: m.dimensions?.width,
      blurHash: m.blurHash,
      ))
      .toList();

      downloadUrls = (await Future.wait(
      selectedMedia.map(
      (m) async => await uploadData(
      m.storagePath, m.bytes),
      ),
    ))
    .where((u) => u != null)
    .map((u) => u!)
    .toList();
    } finally { ScaffoldMessenger.of(context).hideCurrentSnackBar();
    _model.isDataUploading1 = false;
    }
    if (selectedUploadedFiles.length == selectedMedia.length && downloadUrls.length == selectedMedia.length) {
       setState(() {
         _model.uploadedLocalFile1 = selectedUploadedFiles.first;
         _model.uploadedFileUrl1 = downloadUrls.first;
       });
       showUploadMessage(context, 'Success!');
    } else {
      setState(() {});
      showUploadMessage(context, 'Failed to upload data');
      return;
    }
  }
},

Firebase Storage规则

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if false;
    }

    // Allow public read access to PDF files
    match /pdfs/{pdfFile} {
      allow read: if request.auth != null && 
                   pdfFile.matches('.*\\.pdf');
    }
    
    // Maintain existing user-specific rules
    match /users/{userId}/{allPaths=**} {
      allow read: if request.auth.uid == userId;
      allow write: if request.auth.uid == userId;
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:39:55