public async Task <FileOperationStatus> AddFileAsync(string sectionName, string filename, Stream content) { if (string.IsNullOrWhiteSpace(filename)) { return(FileOperationStatus.BadParameters); } var section = FileSections.FirstOrDefault(s => s.Name == sectionName); if (section == null) { LogDebug($"Section {sectionName} not found"); return(FileOperationStatus.NotFound); } if (content == null || !content.CanRead) { return(FileOperationStatus.BadParameters); } if (filename.Contains("_CHANGED_")) { return(FileOperationStatus.BadParameters); } var filePath = FilesLocation + Path.DirectorySeparatorChar + section.Folder + Path.DirectorySeparatorChar + filename; if (File.Exists(filePath)) { return(FileOperationStatus.Conflict); } try { using (var file = new FileStream(filePath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)) { await content.CopyToAsync(file).ConfigureAwait(false); await file.FlushAsync(); } } catch (Exception ex) { LogException(LogLevel.Warning, ex); return(FileOperationStatus.Error); } if (FilesPreprocessingEnabled) { return(FilePreprocessController.EnqueueFile(filePath) ? FileOperationStatus.JobQueued : FileOperationStatus.Ok); } return(FileOperationStatus.Ok); }
public Stream GetFileStream(string sectionName, string filename) { if (string.IsNullOrWhiteSpace(filename)) { return(null); } var section = FileSections.FirstOrDefault(s => s.Name == sectionName); if (section == null) { LogDebug($"Section {sectionName} not found"); return(null); } var filePath = FilesLocation + Path.DirectorySeparatorChar + section.Folder + Path.DirectorySeparatorChar + filename; return(File.Exists(filePath) ? new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) : null); }
public bool FileExists(string sectionName, string filename) { if (string.IsNullOrWhiteSpace(filename)) { return(false); } var section = FileSections.FirstOrDefault(s => s.Name == sectionName); if (section == null) { LogDebug($"Section {sectionName} not found"); return(false); } var filePath = FilesLocation + Path.DirectorySeparatorChar + section.Folder + Path.DirectorySeparatorChar + filename; return(File.Exists(filePath)); }
private FileSection ExtractFileSection(string localPath) { if (localPath == null) { return(null); } try { var sectionName = localPath.Trim('/'); var slashIndex = sectionName.IndexOf("/", StringComparison.Ordinal); var lastSlashIndex = sectionName.LastIndexOf("/", StringComparison.Ordinal); sectionName = sectionName.Substring(slashIndex + 1, lastSlashIndex - slashIndex - 1); LogDebug($"Section requested: {sectionName}"); return(FileSections.FirstOrDefault(s => s.Folder == sectionName)); } catch (Exception) { return(null); } }
public FileOperationStatus DeleteFile(string sectionName, string filename) { var section = FileSections.FirstOrDefault(s => s.Name == sectionName); if (section == null) { LogDebug($"Section {sectionName} not found"); return(FileOperationStatus.NotFound); } if (filename.Contains("_CHANGED_")) { return(FileOperationStatus.BadParameters); } var filePath = FilesLocation + Path.DirectorySeparatorChar + section.Folder + Path.DirectorySeparatorChar + filename; if (!File.Exists(filePath)) { LogDebug($"File {filePath} does not exist and cannot be deleted"); return(FileOperationStatus.NotFound); } var compressed = IoHelper.LoadAllChanged(filePath); try { File.Delete(filePath); compressed.ForEach(File.Delete); return(FileOperationStatus.Ok); } catch (Exception ex) { LogException(LogLevel.Warning, ex); return(FileOperationStatus.Error); } }