/// <summary> /// Gets the folder element type from CFG. /// </summary> /// <param name="blobInfo">The BLOB info.</param> /// <returns></returns> private static IFolderElementExtension GetCfgFolderElementExtension(BlobInfo blobInfo) { FolderElementExtensionSection section = (FolderElementExtensionSection) ConfigurationManager.GetSection(folderElementExtensionCfgName); if (section != null) { foreach (FolderElementExtensionElement element in section.ElementTypes) { if (element.MimeType.Equals(blobInfo.ContentType, StringComparison.InvariantCultureIgnoreCase)) { //Try to create profile instance Type folderType = AssemblyUtil.LoadType(element.Type); IFolderElementExtension retVal = (IFolderElementExtension) Activator.CreateInstance(folderType); //Initialize config parameters retVal.Initialize(element); return(retVal); } } } return(null); }
/// <summary> /// Creates the specified parent id. /// </summary> /// <param name="parentId">The parent id.</param> /// <param name="fileName">Name of the file.</param> /// <param name="srcStream">The SRC stream.</param> /// <returns></returns> public static FolderElement Create(int parentId, string fileName, Stream srcStream, Guid progressUid) { FolderElement retVal = new FolderElement(); BlobInfo blobInfo = new BlobInfo(Guid.NewGuid()); retVal.ParentId = parentId; //Try recognize provider from config setings BlobStorageProvider provider = BlobStorage.Provider; String providerName; String contentType = Mediachase.Ibn.Blob.ContentTypeResolver.ContentType.ResolveByPath(fileName); long fileSize = srcStream.Length; if (TryRecognizeStorageProvider(retVal, fileName, contentType, fileSize, out providerName)) { provider = BlobStorage.Providers[providerName]; } blobInfo.FileName = fileName; blobInfo.Provider = provider.Name; blobInfo.Created = DateTime.UtcNow; blobInfo.ContentSize = fileSize; blobInfo.ContentType = contentType; //Content type assigned by provider //Save blob info to storage using (Stream dstStream = provider.CreateStream(blobInfo)) { //BlobStreamHelper.WriteToStream(dstStream, srcStream, 0, fileSize); WriteToStream(dstStream, srcStream, 0, fileSize, progressUid); } provider.CommitStream(blobInfo); retVal.BlobStorageProvider = provider.Name; retVal.BlobUid = blobInfo.Uid; retVal.Created = DateTime.UtcNow; retVal.Name = blobInfo.FileName; if (retVal.Properties.Contains("ContentSize")) { retVal.Properties["ContentSize"].Value = (Int32)blobInfo.ContentSize; } if (retVal.Properties.Contains("ContentType")) { retVal.Properties["ContentType"].Value = blobInfo.ContentType; } //try IFolderElementExtension folderEl = GetCfgFolderElementExtension(blobInfo); if (folderEl != null) { folderEl.Process(retVal); } retVal.Save(); return(retVal); }