public async Task <IActionResult> AddMessageAttachmentAsync(Guid messageId, IFormCollection model) { // TODO: Improve validation to validate both WebAPI and SignalR request models in the same place. var file = model?.Files?.FirstOrDefault(); if (file == null || file.Length <= 0) { return(BadRequest("Attached file can not be empty")); } // TODO: Replace this helper by some NuGet or smth else. var extension = AttachmentsUtils.GetExtensionFromMimeType(file.ContentType); var supportedExtensions = new[] { "jpg", "png", "mp4" }; if (extension == null || !supportedExtensions.Contains(extension)) { return(BadRequest($"Only {string.Join(", ", supportedExtensions)} formats are supported")); } using (var stream = file.OpenReadStream()) { var request = new AddMessageAttachmentRequest(GetCurrentSaasUserId(), messageId, stream, extension, file.ContentType, file.Length); var result = await _messageSocketService.AddMessageAttachmentAsync(request); return(Ok(result)); } }
public async Task <IActionResult> AddMessageAttachmentAsync(Guid messageId, IFormCollection model) { var userId = GetCurrentUserId(); if (model?.Files == null) { return(BadRequest(new ErrorDto(ErrorCode.NotFound, "There is not photo"))); } var file = model.Files.Count == 0 ? null : model.Files.First(); if (file == null) { return(BadRequest(new ErrorDto(ErrorCode.NotFound, "There is no files in the request"))); } var type = AttachmentsUtils.GetExtentionFromMimeType(file.ContentType); if (type != "jpg" && type != "png" && type != "mp4") { return(BadRequest(new Exception("Only jpg, png, mp4 formats are supported."))); } if (file.Length > 0) { using (var stream = file.OpenReadStream()) { await _messageService.AddMessageAttachmentAsync(new AddMessageAttachmentRequest(userId, messageId, stream, type, file.ContentType, file.Length)); } } return(Ok()); }