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); } }
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); } }
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); }