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); } } }
public async Task <IHttpActionResult> AddOldPoForms(decimal total, string accountNumber = null, string vendorName = null, string poNumber = null, string responsibleParty = null, DateTime?submitDate = null, DateTime?expireDate = null) { // NOTE: This method accounts for submitting multiple po forms at the same time, // given that the user has entered all of the above arguments for each form. // Currently, since there is so much manual input, only one form is allowed to be // submitted at a time. var provider = new MultipartMemoryStreamProvider(); await Request.Content.ReadAsMultipartAsync(provider); // "provider.Contents.Count - 1" just saves one unneeded iteration (would work without -1) for (int i = 0; i < provider.Contents.Count - 1; i++) { var file = provider.Contents[i]; if (file.Headers.ContentDisposition.FileName != null) { var fileName = file.Headers.ContentDisposition.FileName.Replace("\"", string.Empty); var dateModified = await FileDates.StreamToString(provider.Contents[i + 1]); var dataArguments = new Dictionary <string, string> { { "fileName", fileName }, { "total", total.ToString() }, { "accountNumber", accountNumber }, { "vendorName", vendorName }, { "poNumber", poNumber }, { "responsibleParty", responsibleParty }, }; var newPoForm = SaveOldPoToDatabase(dataArguments, dateModified, submitDate, expireDate); await SaveOldPoToFileSystem(file, newPoForm.Id); } } return(Ok()); }