protected virtual void MapFolderItem2CloudBlob(FolderItem folderItem, ICloudBlob cloudBlob) { //Copy properties cloudBlob.Properties.ContentType = folderItem.ContentType; cloudBlob.Properties.ContentLanguage = folderItem.ContentLanguage; cloudBlob.Properties.ContentEncoding = folderItem.ContentEncoding; //Save small data if (folderItem.SmallData != null) { cloudBlob.UploadFromStream(new MemoryStream(folderItem.SmallData)); } //Meta foreach ( PropertyInfo propertyInfo in folderItem.GetType() .GetProperties(BindingFlags.Public | BindingFlags.Instance) .Where(x => x.PropertyType == typeof(string) && x.Name != "Item")) { var value = propertyInfo.GetValue(folderItem, null) as String; if (value != null) { cloudBlob.Metadata[propertyInfo.Name] = value; } } }
protected virtual void MapCloudBlob2FolderItem(CloudBlockBlob cloudBlob, FolderItem folderItem) { /* * try * { * cloudBlob.FetchAttributes(); * } * catch (StorageException e) * { * throw new AssetStorageException(e.Message, (AssetErrorCode)(int)e.RequestInformation.ExtendedErrorInformation.GetHashCode(), e); // TODO: error might not be correct here * } * */ //Copy properties folderItem.FolderItemId = cloudBlob.Uri.LocalPath.Substring(1); //folderItem.FolderItemId = String.Format("{0}{1}{2}{3}", cloudBlob.Container.Name, CurrentCloudBlobClient.DefaultDelimiter, cloudBlob.Parent != null ? cloudBlob.Parent.Prefix : "", cloudBlob.Name); folderItem.FolderId = String.Format("{0}{1}{2}", cloudBlob.Container.Name, this.CurrentCloudBlobClient.DefaultDelimiter, cloudBlob.Parent != null ? cloudBlob.Parent.Prefix : ""); folderItem.Name = folderItem.FolderItemId.Substring( folderItem.FolderItemId.LastIndexOf(this.CurrentCloudBlobClient.DefaultDelimiter) + 1); folderItem.ContentType = cloudBlob.Properties.ContentType; folderItem.ContentLanguage = cloudBlob.Properties.ContentLanguage; folderItem.ContentEncoding = cloudBlob.Properties.ContentEncoding; folderItem.LastModified = cloudBlob.Properties.LastModified.Value.DateTime; folderItem.ContentLength = cloudBlob.Properties.Length; //Read small data //var memoryStream = new MemoryStream(); //cloudBlob.DownloadToStream(memoryStream); //folderItem.SmallData = memoryStream.ToArray(); //Meta foreach (string metaKey in cloudBlob.Metadata.Keys) { PropertyInfo propertyInfo = folderItem.GetType().GetProperty(metaKey); if (propertyInfo != null) { propertyInfo.SetValue(folderItem, cloudBlob.Metadata[metaKey], null); } } }