Exemple #1
0
        /// <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);
            }
        }
Exemple #2
0
        /// <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);
            }
        }