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); }