Ejemplo n.º 1
0
        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);
                }
            }
        }
Ejemplo n.º 2
0
        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());
        }