Exemplo n.º 1
0
        public async Task <IActionResult> SetProfilePicture(List <IFormFile> files)
        {
            var uid = User.Claims.FirstOrDefault(c => c.Type == Helpers.Constants.Strings.JwtClaimIdentifiers.Id)?.Value;

            var user = await _userManager.Users.Include(o => o.ProfilePicture).FirstOrDefaultAsync(p => p.Id == uid);

            long size = files.Sum(f => f.Length);

            var formFile = files[0];

            if (!formFile.IsImage())
            {
                return(BadRequest());
            }

            if (user.ProfilePicture != null)
            {
                var res = await _usersRepository.RemoveProfilePicture(user);

                if (!res)
                {
                    return(Conflict());
                }
                //remove picture from data context
            }
            if (formFile.Length > 0)
            {
                var filename = ContentDispositionHeaderValue
                               .Parse(formFile.ContentDisposition)
                               .FileName
                               .TrimStart().ToString();
                filename = _hostingEnvironment.WebRootPath + $@"\uploads" + $@"\{formFile.FileName}";
                size    += formFile.Length;
                using (var fs = System.IO.File.Create(filename))
                {
                    await formFile.CopyToAsync(fs);

                    fs.Flush();
                }//these code snippets saves the uploaded files to the project directory
                var imageId = Guid.NewGuid().ToString() + Path.GetExtension(filename);
                await _uploadService.PutObjectToStorage(imageId.ToString(), filename);//this is the method to upload saved file to S3

                var res = await _usersRepository.AddProfilePicture(user, new ProfilePicture()
                {
                    Id = imageId
                });

                if (!res)
                {
                    return(Conflict());
                }
                System.IO.File.Delete(filename);
                return(Ok(new ImageToReturnDto()
                {
                    ImageId = imageId
                }));
            }
            return(BadRequest());
        }