/// <summary> /// Fetches the cloud meta. Returned object would only includes (md5, length, name, content type). /// </summary> /// <param name="identifier">The identifier.</param> /// <returns>Beyova.BinaryStorageMetaData.</returns> public override BinaryStorageMetaData FetchCloudMeta(BinaryStorageIdentifier identifier) { try { identifier.CheckNullObject(nameof(identifier)); identifier.Container.CheckEmptyString(nameof(identifier.Container)); identifier.Identifier.CheckEmptyString(nameof(identifier.Identifier)); var request = new GetObjectMetadataRequest { BucketName = identifier.Container, Key = identifier.Identifier, }; var blob = blobClient.GetObjectMetadata(request); var result = new BinaryStorageMetaData(identifier) { Hash = blob.Metadata["x-amz-meta-md5hash"], Length = blob.ContentLength, Name = blob.Headers.ContentDisposition, ContentType = blob.Headers.ContentType }; return(result); } catch (Exception ex) { throw ex.Handle(identifier); } }
/// <summary> /// Fills the meta. /// </summary> /// <param name="meta">The meta.</param> /// <param name="blobProperties">The BLOB properties.</param> public static void FillMeta(this BinaryStorageMetaData meta, BlobProperties blobProperties) { if (meta != null && blobProperties != null) { meta.Hash = blobProperties.ContentMD5; meta.ContentType = blobProperties.ContentType; meta.Name = blobProperties.ContentDisposition.ConvertContentDispositionToName(); } }
/// <summary> /// Migrates the storage. /// </summary> /// <param name="meta">The meta.</param> public void MigrateStorage(BinaryStorageMetaData meta) { if (meta != null && !string.IsNullOrWhiteSpace(meta.Container) && !string.IsNullOrWhiteSpace(meta.Identifier)) { try { var downloadActionCredential = SourceStorageOperator.CreateBlobDownloadCredential(meta.Container, meta.Identifier, 5); var uploadActionCredential = DestinationStorageOperator.CreateBlobUploadCredential(meta.Container, meta.Identifier, 5, meta.Hash, meta.ContentType); var stream = SourceStorageOperator.DownloadBinaryStreamByCredentialUri(downloadActionCredential.CredentialUri); DestinationStorageOperator.UploadBinaryStreamByCredentialUri(uploadActionCredential.CredentialUri, stream, meta.ContentType, meta.Name); } catch (Exception ex) { throw ex.Handle(new { meta }); } } }
/// <summary> /// Fills the meta. /// </summary> /// <param name="meta">The meta.</param> /// <param name="metaData">The meta data.</param> public static void FillMeta(this Dictionary <string, string> meta, BinaryStorageMetaData metaData) { if (meta != null && metaData != null) { if (metaData.Duration != null) { meta.Merge(metaDuration, metaData.Duration.ToString()); } if (metaData.Height != null) { meta.Merge(metaHeight, metaData.Height.ToString()); } if (metaData.Width != null) { meta.Merge(metaWidth, metaData.Width.ToString()); } } }
/// <summary> /// Uploads the binary stream by credential URI. /// </summary> /// <param name="blobUri">The BLOB URI.</param> /// <param name="stream">The stream.</param> /// <param name="contentType">Type of the content.</param> /// <param name="fileName">Name of the file.</param> /// <returns>System.String.</returns> public override string UploadBinaryStreamByCredentialUri(string blobUri, Stream stream, string contentType, string fileName = null) { try { blobUri.CheckEmptyString(nameof(blobUri)); stream.CheckNullObject(nameof(stream)); var metaData = new BinaryStorageMetaData { ContentType = contentType.SafeToString(HttpConstants.ContentType.BinaryDefault), Name = fileName }; var blob = new CloudBlockBlob(new Uri(blobUri)); blob.Properties.FillMeta(metaData); stream.Position = 0; blob.UploadFromStream(stream); return(blob.Properties.ETag); } catch (Exception ex) { throw ex.Handle(new { blobUri, contentType, fileName }); } }
/// <summary> /// Fetches the cloud meta. Returned object would only includes (md5, length, name, content type). /// </summary> /// <param name="identifier">The identifier.</param> /// <returns>Beyova.BinaryStorageMetaData.</returns> public override BinaryStorageMetaData FetchCloudMeta(BinaryStorageIdentifier identifier) { try { identifier.CheckNullObject(nameof(identifier)); identifier.Container.CheckEmptyString(nameof(identifier.Container)); identifier.Identifier.CheckEmptyString(nameof(identifier.Identifier)); var meta = client.GetObjectMetadata(identifier.Container, identifier.Identifier); var result = new BinaryStorageMetaData(identifier) { Hash = meta.ContentMd5, Length = meta.ContentLength, Name = meta.ContentDisposition, ContentType = meta.ContentType }; return(result); } catch (Exception ex) { throw ex.Handle(identifier); } }