我正在尝试优化同时将图像和视频上传到 Firebase Storage 和 Firestore 的过程。目前,我正在使用循环通过图像和视频的单独方法有条件地检查每个资产。我也使用
WriteBatch
,但我面临几个问题:
我想快速完成这些任务:
VideoCompress
和 FlutterImageCompress
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();
我同意@Doug Stevenson 的观点。上传速度由多种因素决定,包括使用的协议、可用带宽、网络延迟以及上传的图像或视频的大小和质量。
对于 Cloud Storage for Firebase 位置,您必须考虑选择靠近您的存储桶位置,以减少延迟并提高可用性。 (这篇帖子可能会给你见解)
如果您使用 Firebase 客户端 SDK 上传,则上传速度比使用 gsutil 慢。这是因为,与 gsutil 和 Cloud Storage 之间的直接通信不同,SDK 必须评估安全规则,这会由于这些评估所花费的时间而引入延迟。
您还可以尝试减小图像或视频的大小和质量,以及提高互联网速度。 (请参阅此帖子)
有关跟踪上传进度和其他有用方法的方法,请查看这些博客:
希望以上内容对您有所帮助。