private async Task AddDocumentToFileSystemAndDb(int id, MultipartMemoryStreamProvider provider) { for (int i = 0; i < provider.Contents.Count - 1; i++) { var file = provider.Contents[i]; if (file.Headers.ContentDisposition.FileName != null) { var dir = FilePaths.WriteSupportingDoc + FilePaths.FolderFromUniqueId(id); if (!System.IO.Directory.Exists(dir)) { System.IO.Directory.CreateDirectory(dir); } // For an unknown reason, the FileName has an extra '\' everywhere, that's why it's replaced with string.Empty var writePath = dir + file.Headers.ContentDisposition.FileName.Replace("\"", string.Empty); var dataStream = await file.ReadAsByteArrayAsync(); using (var saveFile = File.OpenWrite(writePath)) { await saveFile.WriteAsync(dataStream, 0, dataStream.Length); } var dateModified = await FileDates.StreamToString(provider.Contents[i + 1]); await AddFileReferenceToDatabase(id, dateModified, writePath); } } }
private async Task DuplicatePoInFileSystem(int oldId, int newId) { var dir = FilePaths.WriteSupportingDoc + FilePaths.FolderFromUniqueId(newId); var supportingDocuments = _context.Documents .Where(d => d.PoFormId == oldId) .Where(d => d.TypeOfDocument == Data.Services.TypeOfDocument.Supporting) .ToList(); var newPoWritePath = FilePaths.WritePoForm + newId + ".pdf"; if (!Directory.Exists(dir) && !File.Exists(newPoWritePath)) { Directory.CreateDirectory(dir); foreach (var doc in supportingDocuments) { File.Copy(doc.FilePath, dir + Path.GetFileName(doc.FilePath)); } await WriteToFileSystem(newId); } }