/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
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)); }
public virtual async Task <IFile> GetFile(string path, GetFileOptions options) { return(await GetFile(file => file.Path == path, options)); }
public virtual async Task <IFile> GetFile(Guid id, GetFileOptions options) { return(await GetFile(file => file.Id == id, options)); }