Exemple #1
0
        public async Task <TrainingProgram> SaveImage(UpdateTrainingProgramRequest request, TrainingProgram entity)
        {
            if (string.IsNullOrWhiteSpace(request.Image))
            {
                entity.ImageFtpFilePath = null;
                entity.ImageUrl         = null;
                return(entity);
            }

            // TODO... outsource this logic somewhere to share...
            // TODO These media stuff goes on with user avatars, training media, exercise media, chat media, training program media
            if (request.Image != entity.ImageFtpFilePath && request.Image.Contains("data:image/jpeg;base64,"))
            {
                entity.ImageFtpFilePath = _s3Service.GetS3Key(nameof(TrainingProgram), entity.CreatorId);

                var file = new MemoryStream(Convert.FromBase64String(request.Image.Replace("data:image/jpeg;base64,", string.Empty)));

                var compressedFile = await _compressionService.Compress(MediaType.Image, file);

                //TODO: Delete previous image...
                await _s3Service.WriteToS3(entity.ImageFtpFilePath, compressedFile);

                entity.ImageUrl = await _s3Service.GetPresignedUrlAsync(entity.ImageFtpFilePath);
            }

            return(entity);
        }
        public async Task <MediaFile> Handle(UploadTrainingMedia request, CancellationToken cancellationToken)
        {
            try
            {
                // save to s3
                var filename = GetFilename(request);

                var file = request.File.OpenReadStream();

                // compress - TODO: Do this for videos also.. make compression service
                if (request.Type == MediaType.Image)
                {
                    file = await _compressionService.Compress(MediaType.Image, request.File.OpenReadStream());
                }

                await _s3AccessService.WriteToS3(filename, file);

                var presignedUrl = await _s3AccessService.GetPresignedUrlAsync(filename);

                // create db object and map to it
                var media = new MediaFile()
                {
                    ApplicationUserId = request.UserId,
                    TrainingId        = request.TrainingId,
                    ExerciseId        = request.ExerciseId,
                    DownloadUrl       = presignedUrl,
                    Type         = request.Type,
                    DateModified = DateTime.UtcNow,
                    DateUploaded = DateTime.UtcNow,
                    Filename     = request.File.FileName,
                    FtpFilePath  = filename,
                };

                // save to db
                await _context.MediaFiles.AddAsync(media, cancellationToken);

                await _context.SaveChangesAsync(cancellationToken);

                // return created object id or whole object
                return(media);
            }
            catch (Exception ex)
            {
                throw new CreateFailureException($"Could not upload media {request.File.FileName}", ex);
            }
        }
Exemple #3
0
        public async Task <string> Handle(UploadUserAvatarRequest request, CancellationToken cancellationToken)
        {
            try
            {
                // save everything to s3
                var key = _s3.GetS3Key(nameof(ApplicationUser.Avatar), request.UserId);

                var byteArr = Convert.FromBase64String(request.Base64.Replace("data:image/jpeg;base64,", string.Empty));

                var compressedImage = await _compressionService.Compress(MediaType.Image, new MemoryStream(byteArr));

                await _s3.WriteToS3(key, compressedImage);

                var presignedUrl = await _s3.GetPresignedUrlAsync(key);

                // add newly created media
                var media = new MediaFile()
                {
                    ApplicationUserId = request.UserId,
                    DownloadUrl       = presignedUrl,
                    Type         = MediaType.Image,
                    DateModified = DateTime.UtcNow,
                    DateUploaded = DateTime.UtcNow,
                    Filename     = $"Avatar - {DateTime.UtcNow:MM/dd/yyyy}",
                    FtpFilePath  = key,
                };
                await _context.MediaFiles.AddAsync(media, cancellationToken);

                // fetch and update user Avatar KEY for s3.. which will be presigned on every fetch of user
                var user = await _context.Users.FirstOrDefaultAsync(x => x.Id == request.UserId, cancellationToken);

                user.Avatar = key;
                _context.Users.Update(user);
                await _context.SaveChangesAsync(cancellationToken);

                return(presignedUrl);
            }
            catch (Exception e)
            {
                throw new CreateFailureException(nameof(UploadUserAvatarRequest), e);
            }
        }
Exemple #4
0
        public async Task <string> Handle(UploadChatMediaRequest request, CancellationToken cancellationToken)
        {
            try
            {
                var data = request.Data;

                // compress - TODO: Do this for videos also.. make compression service
                if (request.Type == MediaType.Image)
                {
                    data = await _compressionService.Compress(MediaType.Image, request.Data);
                }

                await _s3Service.WriteToS3(request.Key, data);

                return(await _s3Service.GetPresignedUrlAsync(request.Key));
            }
            catch (Exception e)
            {
                throw new CreateFailureException(nameof(UploadChatMediaRequest), e);
            }
        }
        public async Task <TrainingProgram> SaveImage(CreateTrainingProgramRequest request, TrainingProgram entity)
        {
            if (string.IsNullOrWhiteSpace(request.Image))
            {
                entity.ImageFtpFilePath = null;
                entity.ImageUrl         = null;
                return(entity);
            }

            if (request.Image != entity.ImageFtpFilePath && request.Image.Contains("data:image/jpeg;base64,"))
            {
                entity.ImageFtpFilePath = _s3Service.GetS3Key(nameof(TrainingProgram), request.CreatorId);

                var file = new MemoryStream(Convert.FromBase64String(request.Image.Replace("data:image/jpeg;base64,", string.Empty)));

                var compressedFile = await _compressionService.Compress(MediaType.Image, file);

                await _s3Service.WriteToS3(entity.ImageFtpFilePath, compressedFile);

                entity.ImageUrl = await _s3Service.GetPresignedUrlAsync(entity.ImageFtpFilePath);
            }

            return(entity);
        }