/// <summary> /// Записывает содержимое файла в блоб. /// </summary> /// <param name="fileMetadata">Матаданные файла.</param> /// <param name="stream">Содержимое файла.</param> /// <param name="remoteTimeCreated">Время создания версии с удаленного узла.</param> /// <returns></returns> internal BlobFileInfo Write(IBlobFileMetadata fileMetadata, Stream stream, DateTime?remoteTimeCreated = null) { if (fileMetadata == null) { throw new ArgumentNullException("fileMetadata"); } if (stream == null) { throw new ArgumentNullException("stream"); } this.Container.DataAdapter.Logger.WriteFormatMessage("Blob.Write:Начало записи содержимого в блоб, file.UniqueID: {0}", fileMetadata.UniqueID); BlobFileInfo blobFileInfo = new BlobFileInfo(); blobFileInfo.BlobID = this.ID; bool closeBlob = false; DateTime timeCreated; if (remoteTimeCreated.HasValue) { timeCreated = remoteTimeCreated.Value; } else { //начиная с 4ой версии хранится время в UTC timeCreated = DateTime.Now.ToUniversalTime(); } using (FileStream fs = this.File.Open(FileMode.Append, FileAccess.Write, FileShare.Read)) { BlobStreamAdapter streamAdapter = new BlobStreamAdapter(fs); blobFileInfo.BlobStartPosition = fs.Length; streamAdapter.Write(fileMetadata, stream, timeCreated); blobFileInfo.BlobEndPosition = fs.Length; blobFileInfo.TimeCreated = timeCreated; closeBlob = fs.Length > this.Container.DataAdapter.MaxBlobSize; } if (closeBlob) { this.Metadata.Closed = true; this.Container.DataAdapter.BlobMetadataAdapter.SaveBlob(this.Metadata); } this.Container.DataAdapter.Logger.WriteFormatMessage("Blob.Write:Окончание записи содержимого в блоб, file.UniqueID: {0}. Блоб был закрыт после записи файла: {1}", fileMetadata.UniqueID, closeBlob); return(blobFileInfo); }
private IFileVersionMetadata WriteInternal(IBlobFileMetadata blobFileMetadata, Stream stream, DateTime?remoteTimeCreated = null) { if (blobFileMetadata == null) { throw new ArgumentNullException("param"); } if (stream == null) { throw new ArgumentNullException("stream"); } this.Logger.WriteFormatMessage("WriteFile:Начало записи файла, folderMetadata.Name: {0}, fileName: {1}", blobFileMetadata.FolderMetadata.Name, blobFileMetadata.Name); //получение контейнера блобов. BlobContainer container = this.GetBlobContainer(blobFileMetadata.FolderMetadata); //запись файла в контейнер. BlobFileInfo blobFileInfo = container.Write(blobFileMetadata, stream, remoteTimeCreated); //установка свойств файла, хранящегося в блобе blobFileMetadata.BlobID = blobFileInfo.BlobID; blobFileMetadata.BlobStartPosition = blobFileInfo.BlobStartPosition; blobFileMetadata.BlobEndPosition = blobFileInfo.BlobEndPosition; this.Logger.WriteMessage("WriteFile:Начало сохранения метаданных файла"); IBlobFileVersionMetadata savedVersion = this.BlobMetadataAdapter.SaveFile(blobFileMetadata, blobFileInfo.TimeCreated); this.Logger.WriteMessage("WriteFile:Окончание сохранения метаданных файла"); this.Logger.WriteFormatMessage("WriteFile:Начало записи файла, folderMetadata.Name: {0}, fileName: {1}, fileUniqueID: {2}, fileVersionUniqueID: {3}", blobFileMetadata.FolderMetadata.Name, blobFileMetadata.Name, savedVersion.FileMetadata.UniqueID, savedVersion.UniqueID); return(savedVersion); }