in src/Utilities.cs [121:157]
internal static async Task<long> EstimateFileSizeAsync(IPersistentStorageFile cloudFile, double estimatedCompressionRatio)
{
if (cloudFile is IFileWithMetadata cloudFileWithMetadata)
{
IReadOnlyDictionary<string, string> metadata = await cloudFileWithMetadata.GetFileMetaDataAsync();
long? estimatedSizeBytes = GetPositiveLongProperty(metadata,
#if !OPEN_SOURCE_COMPILATION
(cloudFile is S3PersistentStorageFile) ? Constants.AwsMetadataRawDataSize :
#endif
Constants.BlobMetadataRawDataSizeLegacy);
if (estimatedSizeBytes.HasValue)
{
return estimatedSizeBytes.Value;
}
estimatedSizeBytes = GetPositiveLongProperty(metadata,
#if !OPEN_SOURCE_COMPILATION
(cloudFile is S3PersistentStorageFile) ? Constants.AwsMetadataRawDataSize :
#endif
Constants.BlobMetadataRawDataSize);
if (estimatedSizeBytes.HasValue)
{
return estimatedSizeBytes.Value;
}
}
long blobSize = await cloudFile.GetLengthAsync();
string blobName = cloudFile.GetFileName();
// TODO: we need to add proper handling per format
if (blobName.EndsWith(".zip", StringComparison.OrdinalIgnoreCase) || blobName.EndsWith(".gz", StringComparison.OrdinalIgnoreCase))
{
blobSize = (long)(blobSize * estimatedCompressionRatio);
}
return blobSize;
}