public async Task <IActionResult> UploadFiles(List <IFormFile> files) { var log = new List <ScanResult>(); foreach (var formFile in files) { if (formFile.Length > 0) { var clam = new ClamClient("clamav-server", 3310); var ping = await clam.PingAsync(); var result = await clam.SendAndScanFileAsync(formFile.OpenReadStream()); log.Add(new ScanResult() { FileName = formFile.FileName, Result = result.Result.ToString(), Message = result.InfectedFiles?.FirstOrDefault()?.VirusName, RawResult = result.RawResult }); } } var model = new UploadFilesViewModel(); model.Results = log; return(View(model)); }
public IActionResult UploadFiles() { var images = Directory.EnumerateFiles(Path.Combine(_environment.WebRootPath, "Uploads\\Images")) .Select(path => Path.GetFileName(path)); var viewModel = new UploadFilesViewModel { Images = images, WrongTypeFiles = new List <string>() }; return(View(viewModel)); }
public async Task <IActionResult> UploadImages(List <IFormFile> files) { List <string> wrongTypeFile = await _fileService.SaveFiles(files); if (wrongTypeFile.Count > 0) { var viewModel = new UploadFilesViewModel { Images = _fileService.GetImagesList(), WrongTypeFiles = wrongTypeFile }; return(View("UploadFiles", viewModel)); } else { var viewModel = new UploadFilesViewModel { Images = _fileService.GetImagesList(), WrongTypeFiles = new List <string>() }; return(View("UploadFiles", viewModel)); } }
public async Task <List <string> > UploadFiles(UploadFilesViewModel filesModel) { var fileNames = new List <string>(); var dirname = filesModel.Folder; var contentRootPath = _hostingEnvironment.ContentRootPath; var dirPath = Path.Combine(contentRootPath, "wwwroot", "uploads", dirname); if (!Directory.Exists(dirPath)) { Directory.CreateDirectory(dirPath); } foreach (var file in filesModel.Files) { var fileName = Path.Combine(Path.GetRandomFileName() + Path.GetExtension(file.FileName)); var path = Path.Combine(dirPath, fileName); await file.CopyToAsync(new FileStream(path, FileMode.Create)); fileNames.Add(fileName); } return(fileNames); }
public IActionResult UploadFiles() { var model = new UploadFilesViewModel(); return(View(model)); }
public async Task <IActionResult> UploadFiles(List <IFormFile> files) { var log = new List <ScanResult>(); foreach (var formFile in files) { if (formFile.Length > 0) { var extension = formFile.FileName.Contains('.') ? formFile.FileName.Substring(formFile.FileName.LastIndexOf('.'), formFile.FileName.Length - formFile.FileName.LastIndexOf('.')) : string.Empty; var file = new File { Name = $"{Guid.NewGuid()}{extension}", Alias = formFile.FileName, Region = "us-east-1", Bucket = BUCKET_NAME, ContentType = formFile.ContentType, Size = formFile.Length, Uploaded = DateTime.UtcNow, }; var ping = await _clam.PingAsync(); if (ping) { _logger.LogInformation("Successfully pinged the ClamAV server."); var result = await _clam.SendAndScanFileAsync(formFile.OpenReadStream()); file.ScanResult = result.Result.ToString(); file.Infected = result.Result == ClamScanResults.VirusDetected; file.Scanned = DateTime.UtcNow; if (result.InfectedFiles != null) { foreach (var infectedFile in result.InfectedFiles) { file.Viruses.Add(new Virus { Name = infectedFile.VirusName }); } } var metaData = new Dictionary <string, string> { { "av-status", result.Result.ToString() }, { "av-timestamp", DateTime.UtcNow.ToString() }, { "alias", file.Alias } }; try { var found = await _minio.BucketExistsAsync(BUCKET_NAME); if (!found) { await _minio.MakeBucketAsync(BUCKET_NAME); } await _minio.PutObjectAsync(BUCKET_NAME, file.Name, formFile.OpenReadStream(), formFile.Length, formFile.ContentType, metaData); await _context.Files.AddAsync(file); await _context.SaveChangesAsync(); } catch (MinioException e) { _logger.LogError($"File Upload Error: {e.Message}"); } var scanResult = new ScanResult() { FileName = formFile.FileName, Result = result.Result.ToString(), Message = result.InfectedFiles?.FirstOrDefault()?.VirusName, RawResult = result.RawResult }; log.Add(scanResult); } else { _logger.LogWarning("Wasn't able to connect to the ClamAV server."); } } } var model = new UploadFilesViewModel { Results = log }; return(View("UploadResults", model)); }
public async Task<ActionResult> Upload(UploadFilesViewModel model, IEnumerable<IFormFile> files) { //... }