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}"));
            }
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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."
            }));
        }