示例#1
0
        public async Task <IActionResult> Upload([CanBeNull] IFormFile uploadedFile)
        {
            if (uploadedFile == null)
            {
                return(this.ErrorView(Error.Create("EmptyFile", "File is required")));
            }

            using (var binaryReader = new BinaryReader(uploadedFile.OpenReadStream()))
            {
                var viewModel = new UploadDataFileViewModel
                {
                    Name    = uploadedFile.FileName,
                    Content = binaryReader.ReadBytes((int)uploadedFile.Length)
                };
                var(dataFile, errors) = await dataFilesStore.SaveAsync(viewModel).ConfigureAwait(false);

                if (errors != Error.NoError)
                {
                    return(this.ErrorView(errors));
                }

                DataFileProcessor.Enqueue(dataFile.Id);
            }
            return(RedirectToAction("Index"));
        }
        public async Task <(DataFile, Error[])> SaveAsync(UploadDataFileViewModel viewModel)
        {
            var fileHash = hashAlgorithm.ComputeHash(viewModel.Content);

            if (await applicationDbContext.DataFiles.AnyAsync(df => df.Hash == fileHash).ConfigureAwait(false))
            {
                return(null, Error.Create(DataFilesStoreErrors.DataFileExists));
            }

            var dataFile = new DataFile
            {
                Id          = Guid.NewGuid(),
                Name        = viewModel.Name,
                Content     = viewModel.Content,
                Hash        = fileHash,
                IsProcessed = false
            };

            await applicationDbContext.DataFiles.AddAsync(dataFile).ConfigureAwait(false);

            await applicationDbContext.SaveChangesAsync().ConfigureAwait(false);

            return(dataFile, Error.NoError);
        }