/// <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);
            }
        }
Example #2
0
 /// <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();
     }
 }
Example #3
0
        /// <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 });
                }
            }
        }
Example #4
0
        /// <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 });
            }
        }
Example #6
0
        /// <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);
            }
        }