Example #1
0
        /// <summary>
        /// Возвращает файл.
        /// </summary>
        /// <param name="fileUniqueID">Уникальный идентификатор файла.</param>
        /// <param name="loadOptions">Опции загрузки файла.</param>
        /// <param name="throwIfNotExists">Выдать ислючение если файл не найден.</param>
        /// <returns></returns>
        public IFile GetFile(Guid fileUniqueID, GetFileOptions loadOptions = null, bool throwIfNotExists = true)
        {
            FileUri fileUri = new FileUri(this.Url, fileUniqueID);
            File    file    = this.TypedStorage.GetFileInternal(fileUri, loadOptions, throwIfNotExists);

            return(file);
        }
Example #2
0
        /// <summary>
        /// Возвращает файл из папки по умолчанию по уникальному идентификатору.
        /// </summary>
        /// <param name="fileUniqueID">Уникальный идентификатор файла.</param>
        /// <param name="loadOptions">Опции загрузки файла.</param>
        /// <param name="throwIfNotExists">Выдать ислючение если файл не найден.</param>
        /// <returns></returns>
        internal File GetFileInternal(Guid fileUniqueID, GetFileOptions loadOptions = null, bool throwIfNotExists = true)
        {
            if (fileUniqueID == null)
            {
                throw new ArgumentNullException("fileUniqueID");
            }

            this.Logger.WriteFormatMessage("GetFileInternal:Начало получения файла, fileUniqueID: {0}", fileUniqueID);
            File file = this.GetFileInternal(this.DefaultFolder.Url, fileUniqueID, loadOptions, throwIfNotExists);

            this.Logger.WriteFormatMessage("GetFileInternal:Окончание получения файла, fileUniqueID: {0}", fileUniqueID);

            return(file);
        }
Example #3
0
        /// <summary>
        /// Возвращает файл по адресу.
        /// </summary>
        /// <param name="fileUrl">Адрес файла.</param>
        /// <param name="loadOptions">Опции загрузки файла.</param>
        /// <param name="throwIfNotExists">Выдать ислючение если файл не найден.</param>
        /// <returns></returns>
        internal File GetFileInternal(string fileUrl, GetFileOptions loadOptions = null, bool throwIfNotExists = true)
        {
            if (string.IsNullOrEmpty(fileUrl))
            {
                throw new ArgumentNullException("fileUrl");
            }

            this.Logger.WriteFormatMessage("GetFileInternal:Начало получения файла, fileUrl: {0}", fileUrl);
            FileUri fileUri = new FileUri(fileUrl);
            File    file    = this.GetFileInternal(fileUri, loadOptions, throwIfNotExists);

            this.Logger.WriteFormatMessage("GetFileInternal:Окончание получения файла, fileUrl: {0}", fileUrl);

            return(file);
        }
Example #4
0
        /// <summary>
        /// Возвращает транспортный объект файла для передачи клиенту.
        /// </summary>
        /// <param name="file">Файл.</param>
        /// <param name="loadOptions">Опции загрузки.</param>
        /// <returns></returns>
        public static WcfFileInfo FromFile(IFile file, GetFileOptions loadOptions = null)
        {
            if (file == null)
            {
                throw new ArgumentNullException("file");
            }

            WcfFileInfo wcfFile = new WcfFileInfo()
            {
                UniqueID        = file.UniqueID,
                FolderUniqueID  = file.Folder.UniqueID,
                VersionUniqueID = file.VersionUniqueID,
                Name            = file.Name,
                TimeCreated     = file.TimeCreated,
                TimeModified    = file.TimeModified,
                FolderUrl       = file.FolderUrl,
                Url             = file.Url,
                Size            = file.Size
            };

            if (loadOptions != null && loadOptions.LoadContent)
            {
                if (file.Content != null)
                {
                    wcfFile.Content = file.Content;
                }
                else
                {
                    //в буферном режиме не может быть тастолько большим
                    //проверки на размер есть в вызывающем коде, до физического чтения содержимого
                    int bufferedFileSize = (int)file.Size;

                    wcfFile.Content = new byte[bufferedFileSize];
                    using (Stream st = file.Open())
                    {
                        int read = st.Read(wcfFile.Content, 0, bufferedFileSize);
                        if (read != file.Size)
                        {
                            throw new Exception(string.Format("Не удалось полностью считать содержимое файла."));
                        }
                    }
                }
            }

            return(wcfFile);
        }
Example #5
0
        /// <summary>
        /// Возвращает файл.
        /// </summary>
        /// <param name="folderUrl">Адрес папки с файлом.</param>
        /// <param name="fileUniqueID">Уникальный идентификатор файла.</param>
        /// <param name="loadOptions">Опции загрузки файла.</param>
        /// <param name="throwIfNotExists">Выдать ислючение если файл не найден.</param>
        /// <returns></returns>
        public IFile GetFile(string folderUrl, Guid fileUniqueID, GetFileOptions loadOptions = null, bool throwIfNotExists = true)
        {
            if (string.IsNullOrEmpty(folderUrl))
            {
                throw new ArgumentNullException("folderUrl");
            }

            if (fileUniqueID == Guid.Empty)
            {
                throw new ArgumentNullException("fileUniqueID");
            }

            this.Logger.WriteFormatMessage("GetFile:Начало получения файла, folderUrl: {0}, fileUniqueID: {1}", folderUrl, fileUniqueID);
            FileUri fileUri = new FileUri(folderUrl, fileUniqueID);
            File    file    = this.GetFileInternal(fileUri, loadOptions, throwIfNotExists);

            this.Logger.WriteFormatMessage("GetFile:Окончание получения файла, folderUrl: {0}, fileUniqueID: {1}", folderUrl, fileUniqueID);

            return(file);
        }
Example #6
0
        /// <summary>
        /// Возвращает файл.
        /// </summary>
        /// <param name="folderUrl">Адрес папки.</param>
        /// <param name="fileUniqueID">Уникальный идентификатор файла.</param>
        /// <param name="loadOptions">Опции загрузки.</param>
        /// <returns></returns>
        public WcfFileInfo GetFile(string folderUrl, Guid fileUniqueID, GetFileOptions loadOptions = null)
        {
            WcfFileInfo wcfFile = null;

            try
            {
                this.Authorize();

                if (string.IsNullOrEmpty(folderUrl))
                {
                    throw new ArgumentNullException("folderUrl");
                }

                if (fileUniqueID == Guid.Empty)
                {
                    throw new ArgumentNullException("fileUniqueID");
                }

                this.Logger.WriteFormatMessage("GetFile:Начало получения файла, folderUrl: {0}, fileUniqueID: {1}", folderUrl, fileUniqueID);

                //файл выбираем всегда без содержимого, чтобы не превысить размер буферной передачи,
                //которая известна только на уровне транспорта
                using (IFile file = this.Storage.GetFile(folderUrl, fileUniqueID))
                {
                    if (loadOptions != null && loadOptions.LoadContent)
                    {
                        this.VerifyBufferSize(file.Size);
                    }

                    wcfFile = WcfFileInfo.FromFile(file, loadOptions);
                }
                this.Logger.WriteFormatMessage("GetFile:Окончание получения файла, folderUrl: {0}, fileUniqueID: {1}", folderUrl, fileUniqueID);
            }
            catch (Exception ex)
            {
                this.Logger.WriteFormatMessage("GetFile:Ошибка выполенения операции, текст ошибки: {0}", ex);
                throw ex;
            }

            return(wcfFile);
        }
Example #7
0
        /// <summary>
        /// Возвращает транспортный объект файла для передачи клиенту.
        /// </summary>
        /// <param name="file">Файл.</param>
        /// <param name="loadOptions">Опции загрузки.</param>
        /// <returns></returns>
        public static WcfFileVersionInfo FromFileVersion(IFileVersion fileVersion, GetFileOptions loadOptions = null)
        {
            if (fileVersion == null)
            {
                throw new ArgumentNullException("fileVersion");
            }

            WcfFileVersionInfo wcfFile = new WcfFileVersionInfo()
            {
                UniqueID         = fileVersion.UniqueID,
                Name             = fileVersion.Name,
                TimeCreated      = fileVersion.TimeCreated,
                Size             = fileVersion.Size,
                CreatedStorageID = fileVersion.CreatedStorageID
            };

            if (loadOptions != null && loadOptions.LoadContent)
            {
                wcfFile.Content = fileVersion.Content;
            }

            return(wcfFile);
        }
Example #8
0
        /// <summary>
        /// Возвращает файл.
        /// </summary>
        /// <param name="fileUri">Адрес файла.</param>
        /// <param name="loadOptions">Опции загрузки файла.</param>
        /// <param name="throwIfNotExists">Выдать ислючение если файл не найден.</param>
        /// <returns></returns>
        internal File GetFileInternal(FileUri fileUri, GetFileOptions loadOptions = null, bool throwIfNotExists = true)
        {
            if (fileUri == null)
            {
                throw new ArgumentNullException("fileUri");
            }

            this.Logger.WriteFormatMessage("GetFileInternal:Начало получения файла, fileUri.Url: {0}", fileUri.Url);
            Folder        folder       = this.GetFolderInternal(fileUri.FolderUrl);
            IFileMetadata fileMetadata = this.DataAdapter.ReadFileMetadata(folder.Metadata, fileUri.FileUniqueID);

            File file = null;

            if (fileMetadata != null)
            {
                //чтение содержимого файла.
                byte[] content = null;
                if (loadOptions != null && loadOptions.LoadContent)
                {
                    this.Logger.WriteFormatMessage("GetFileInternal:Начало чтение содержимого файла, fileUri.Url: {0}", fileUri.Url);
                    content = this.DataAdapter.ReadFileContent(fileMetadata);
                    this.Logger.WriteFormatMessage("GetFileInternal:Окончание чтение содержимого файла, fileUri.Url: {0}", fileUri.Url);
                }

                file = new File(this, folder, fileMetadata, content);
            }

            if (throwIfNotExists && file == null)
            {
                throw new Exception(string.Format("Не удалось найти файл по адресу {0}.", fileUri.Url));
            }

            this.Logger.WriteFormatMessage("GetFileInternal:Окончание получения файла, fileUri.Url: {0}", fileUri.Url);

            return(file);
        }
Example #9
0
        public virtual async Task <File> GetFile(Expression <Func <File, bool> > filter, GetFileOptions options)
        {
            var query = Files.AsNoTracking();

            if ((options.HasFlag(GetFileOptions.IncludeFileContents) || options.HasFlag(GetFileOptions.None)) && !options.HasFlag(GetFileOptions.IgnoreFileContents))
            {
                query = query.Include(f => f.Content);
            }

            if (!options.HasFlag(GetFileOptions.ExcludeTags))
            {
                query = query.Include(d => d.Tags);
            }

            return(await query.SingleOrDefaultAsync(filter));
        }
Example #10
0
 public virtual async Task <IFile> GetFile(string path, GetFileOptions options)
 {
     return(await GetFile(file => file.Path == path, options));
 }
Example #11
0
 public virtual async Task <IFile> GetFile(Guid id, GetFileOptions options)
 {
     return(await GetFile(file => file.Id == id, options));
 }