Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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);
        }