/// <summary> /// Takes stream containing image and returns <see cref="Attachment" /> object. /// This method doesn't compress image, it just calculates scaled dimensions /// And saves the image. /// </summary> /// <param name="formFile"></param> /// <param name="imageName"></param> /// <param name="chatOrUserId"></param> /// <param name="sender"></param> /// <returns></returns> public async Task <MessageAttachment> SaveMessagePicture(IFormFile formFile, string imageName, string chatOrUserId, string sender) { try { using (var image = new MemoryStream()) { formFile.CopyTo(image); image.Seek(0, SeekOrigin.Begin); var resultDimensions = ImageScaling.GetScaledDimensions(image, MessageImageMaxWidth, MessageImageMaxHeight); image.Seek(0, SeekOrigin.Begin); var resized = ImageCompression.Resize(image, resultDimensions.Item1, resultDimensions.Item2); var imageNameWithoutExt = Path.GetFileNameWithoutExtension(imageName); var extension = Path.GetExtension(imageName); imageName = imageName.Length > MaxFileNameLength ? imageNameWithoutExt.Substring(0, MaxFileNameLength - extension.Length) + extension : imageName; var resultPath = await SaveFile(formFile, resized, imageName, chatOrUserId, sender); return(new MessageAttachment { AttachmentKind = AttachmentKind.Image, AttachmentName = imageName, ContentUrl = config["FileServer:Url"] + resultPath, ImageHeight = resultDimensions.Item2, ImageWidth = resultDimensions.Item1 }); } } catch (ArgumentException e) { logger.LogError(e, "While resizing an image."); throw new Exception("Failed to upload this image.", e); } catch (Exception ex) { logger.LogError(ex, "While resizing an image."); throw new Exception("Failed to upload this image.", ex); } }
/// <summary> /// Returns new thumbnail url and full-sized image url. /// </summary> /// <param name="formFile"></param> /// <param name="imageName"></param> /// <param name="chatOrUserId"></param> /// <param name="sender"></param> /// <returns></returns> public async Task <ValueTuple <string, string> > SaveProfileOrChatPicture(IFormFile formFile, string imageName, string chatOrUserId, string sender) { try { using (var image = new MemoryStream()) { formFile.CopyTo(image); image.Seek(0, SeekOrigin.Begin); var resized = ImageCompression.Resize(image, ThumbnailWidth, ThumbnailHeight); resized.Seek(0, SeekOrigin.Begin); image.Seek(0, SeekOrigin.Begin); imageName = imageName.Length > MaxFileNameLength ? imageName.Substring(0, MaxFileNameLength) : imageName; var uncompressedFileName = await SaveFile(formFile, image, imageName, chatOrUserId, sender, FullSized); var compressedFileName = await SaveFile(formFile, resized, imageName, chatOrUserId, sender, Compressed, Path.GetDirectoryName(uncompressedFileName) + Path.DirectorySeparatorChar); resized.Dispose(); return(new ValueTuple <string, string>( config["FileServer:Url"] + compressedFileName, config["FileServer:Url"] + uncompressedFileName)); } } catch (ArgumentException ex) { throw new Exception("Failed to upload this image.", ex); } catch (Exception ex) { throw new Exception("Failed to upload this image.", ex); } }