如何优化同时上传图像和视频到 Firebase Storage 和 Firestore?

问题描述 投票:0回答:1

我正在尝试优化同时将图像和视频上传到 Firebase Storage 和 Firestore 的过程。目前,我正在使用循环通过图像和视频的单独方法有条件地检查每个资产。我也使用

WriteBatch
,但我面临几个问题:

  • Slow UploadProcess:当前上传速度很差
  • 进度跟踪:我缺乏一种有效的方法来跟踪图像和视频的上传进度

我想快速完成这些任务:

  1. 使用
    VideoCompress
    FlutterImageCompress
  2. 进行图像/视频压缩
  3. 上传到 FirebaseStorage
  4. 检索下载 URL
  5. 创建 Asset 对象以将其另存为文档到 Firestore
List<AssetEntity> assetsList = [];
WriteBatch batch = FirebaseFirestore.instance.batch();
int totalFiles = assets.length;
int uploadedFiles = 0;

for (final asset in assets) {
 late Uint8List? compressedThumbnailData;
 late Uint8List? compressedData;
 late String contentType;
 late String filename;
 late String downloadUrl;
 late String thumbnailUrl;

 if (asset.type == AssetType.video) {} else {}
 // conditionally check if asset is video or image, compress it, then assign it
 // a contentType, docId, filename, and the compressedData

 downloadUrl = await mediaServices.uploadImage(
  image: compressedData,
  type: contentType,
  path: bucketPath,
  filename: filename,
 );

 GeoPoint? location = await getAssetGeoPoint(asset);

 final asset = Asset(
  ... assign all of the models parameters 
 );

 assetsList.add(asset);

 final assetDocRef = _firestore.collection("").doc(docId);

 batch.set(assetDocRef, asset.toMap());

 uploadedFiles++;
 
}

await batch.commit();
flutter google-cloud-firestore file-upload
1个回答
0
投票

我同意@Doug Stevenson 的观点。上传速度由多种因素决定,包括使用的协议、可用带宽、网络延迟以及上传的图像或视频的大小和质量。

对于 Cloud Storage for Firebase 位置,您必须考虑选择靠近您的存储桶位置,以减少延迟并提高可用性。 (这篇帖子可能会给你见解)

如果您使用 Firebase 客户端 SDK 上传,则上传速度比使用 gsutil 慢。这是因为,与 gsutil 和 Cloud Storage 之间的直接通信不同,SDK 必须评估安全规则,这会由于这些评估所花费的时间而引入延迟。

您还可以尝试减小图像或视频的大小和质量,以及提高互联网速度。 (请参阅此帖子

有关跟踪上传进度和其他有用方法的方法,请查看这些博客:

  1. Firebase 存储的 5 个技巧

  2. 在 Flutter 中将图像、视频和文件上传到 API:最佳实践和方法

  3. Firebase 云存储

希望以上内容对您有所帮助。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.