public async Task <IActionResult> Upload([FromForm] FilesUploadDto uploadDto) { var check = Directory.Exists(@"Resources/Resumes"); if (!Directory.Exists(@"Resources/Resumes")) { Directory.CreateDirectory(@"Resources/Resumes"); } var user = await _userManager.Users.SingleOrDefaultAsync(u => u.Email == uploadDto.Email); if (user == null) { return(NotFound()); } try { //var formCollection = await Request.ReadFormAsync(); var file = uploadDto.File; var folderName = Path.Combine("Resources", "Resumes"); var pathToSave = Path.Combine(Directory.GetCurrentDirectory(), folderName); if (file.Length > 0) { var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"'); var fullPath = Path.Combine(pathToSave, fileName); var dbPath = Path.Combine(folderName, fileName); using (var stream = new FileStream(fullPath, FileMode.Create)) { file.CopyTo(stream); } var fileToUploaded = new Download { FileName = fileName, AppUserId = user.Id }; _unitOfWork.FileRepository.AddFiles(fileToUploaded); await _unitOfWork.Complete(); return(Ok(new { dbPath })); } else { return(BadRequest()); } } catch (Exception ex) { return(StatusCode(500, $"Internal server error: {ex}")); } }
public async Task <IActionResult> Upload([FromForm] FilesUploadDto model) { if (model.Files.Count != model.LocalId.Count) { return(BadRequest(new ApiMessage { Message = ResponseMessage.InvalidLocalId })); } var validateModelResult = ValidateModel(model); if (validateModelResult is BadRequestResult) { return(validateModelResult); } string folder; string url; switch (model.Type) { case "Image": folder = ApplicationStaticPath.Images; url = ApplicationStaticPath.Clients.Image; break; case "Avatar": folder = ApplicationStaticPath.Avatars; url = ApplicationStaticPath.Clients.Avatar; break; case "Video": folder = ApplicationStaticPath.Videos; url = ApplicationStaticPath.Clients.Video; break; case "Music": folder = ApplicationStaticPath.Musics; url = ApplicationStaticPath.Clients.Music; break; case "Document": folder = ApplicationStaticPath.Documents; url = ApplicationStaticPath.Clients.Document; break; case "Other": folder = ApplicationStaticPath.Others; url = ApplicationStaticPath.Clients.Other; break; default: folder = ApplicationStaticPath.Others; url = ApplicationStaticPath.Clients.Other; break; } if (!Directory.Exists(folder)) { Directory.CreateDirectory(folder); } var result = new List <UserFileDto>(); for (int i = 0; i < model.Files.Count; i++) { var tempPath = Path.Combine(folder, model.Files[i].FileName); var fileName = Path.GetFileNameWithoutExtension(tempPath); var extension = Path.GetExtension(tempPath); var uniqueId = Guid.NewGuid().ToString("N"); var newName = $"{uniqueId}{extension}"; var filePath = Path.Combine(_env.ContentRootPath, folder, newName); using (var fileStream = new FileStream(filePath, FileMode.Create)) { model.Files[i].CopyTo(fileStream); } using (var thumbnailFileStream = new FileStream(filePath, FileMode.Open)) { model.Files[i].CopyTo(thumbnailFileStream); if (model.Type == "Image" && extension != ".svg") { var thumbName = $"{uniqueId}_t{extension}"; var thumbPath = Path.Combine(folder, thumbName); _imageProcessingService.MakeThumbnail(thumbnailFileStream, thumbPath); } } var fileUrl = $"{url}/{newName}"; var userFile = new UserFile { Type = model.Type, Name = fileName, IsPrivate = model.IsPrivate, Size = model.Files[i].Length, UniqueId = uniqueId, Url = fileUrl, MediaType = model.Files[i].ContentType, Path = Path.Combine(folder, newName), LocalId = model.LocalId[i] }; await _unitOfWork.FilesService.AddAsync(userFile); var dto = _mapper.Map <UserFileDto>(userFile); result.Add(dto); } await _unitOfWork.SaveChangesAsync(); return(Json(result)); }
private IActionResult ValidateModel(FilesUploadDto model) { var filesCount = 1; if (HttpContext.HasFileCount()) { filesCount = Convert.ToInt32(HttpContext.GetFilesCount()); } if (model.Files == null || model.Files.Count < 1 || model.Files.Count > filesCount) { return(BadRequest(new ApiMessage() { Message = "Files count validation failed. check files count again." })); } var isValid = true; switch (model.Type) { case "Avatar": foreach (var file in model.Files) { isValid = IsValidFile(file, new List <string> { ".jpg", ".jpeg", ".png", ".gif", ".svg" }); } break; case "Image": foreach (var file in model.Files) { isValid = IsValidFile(file, new List <string> { ".jpg", ".jpeg", ".png", ".gif", ".svg" }); } break; case "Video": foreach (var file in model.Files) { isValid = IsValidFile(file, new List <string> { ".mp4", ".wmv", ".mkv", ".mov" }); } break; case "Music": foreach (var file in model.Files) { isValid = IsValidFile(file, new List <string> { ".mp3", ".m4a", ".wave", ".wma" }); } break; case "Document": foreach (var file in model.Files) { isValid = IsValidFile(file, new List <string> { ".doc", ".docx", ".xls", ".xlsx", ".pdf", ".ppt", ".pptx" }); } break; case "Other": break; } if (isValid) { return(Ok()); } return(BadRequest(new ApiMessage() { Message = "Files Type validation failed. check files type again." })); }