using Knoks.Framework.Extentions; using System; using System.IO; using System.Threading.Tasks; namespace Knoks.Framework.Document { public class DocumentProcess : IDocumentProcess { private IDocumentOptions _documentOptions; public DocumentProcess(IDocumentOptions documentOptions) { _documentOptions = documentOptions; } public async Task Save(Stream srcStream, string dstFileName, bool replace = false) { var destinationFileInfo = new FileInfo(Path.Combine(_documentOptions.UploadDirectoryPath, dstFileName)); bool replaced = replace ? await destinationFileInfo.ArchiveFile() : false; if (!replaced) destinationFileInfo.CreateDirectory(); using (var fs = destinationFileInfo.Create()) { await srcStream.CopyToAsync(fs); fs.Flush(); } } public async Task SaveIndexed(Stream srcStream, string dstFileName) { var resultFileName = dstFileName; var path = Path.Combine(_documentOptions.UploadDirectoryPath, dstFileName); var destinationFileInfo = new FileInfo(path); string name = destinationFileInfo.GenerateArchiveFullName(); if (path != name) { destinationFileInfo = new FileInfo(name); resultFileName = Path.Combine(Path.GetDirectoryName(dstFileName), Path.GetFileName(name)); } //if(resultFileName==dstFileName) destinationFileInfo.CreateDirectory(); using (var fs = destinationFileInfo.Create()) { await srcStream.CopyToAsync(fs); fs.Flush(); } return resultFileName; } public FileStream LoadFileStream(string dstFileName) { if (File.Exists(Path.Combine(_documentOptions.DownloadDirectoryPath, dstFileName))) { return new FileStream(Path.Combine(_documentOptions.DownloadDirectoryPath, dstFileName), FileMode.Open, FileAccess.Read); } return null; } public DateTimeOffset GetFileModified(string dstFileName) { return new FileInfo(Path.Combine(_documentOptions.DownloadDirectoryPath, dstFileName)).CreationTimeUtc; } public byte[] LoadFileBytes(string dstFileName) { return File.ReadAllBytes(Path.Combine(_documentOptions.DownloadDirectoryPath, dstFileName)); } } }