示例#1
0
        public IImageContainer UploadImage(UploadImageModel model, System.Web.HttpPostedFile postedFile)
        {
            var user = _userService.GetCurrentUserId();
            var userImage = new UserImage()
            {
                UserImageType = model.UserImageType,
                CreatedDate = DateTime.UtcNow,
                CreatedBy = user
            };

            var uploadSettings = RcConfiguration.ImageUpload.GetSettings(model.UserImageType);
            byte[] fileData;
            string hash;

            if (_fileUploadService.ConvertFileToByteArray(postedFile.InputStream, postedFile.ContentLength, out fileData,
                out hash) == false)
            {
                return null;
            }

            try
            {
                var sourceImage = new WebImage(fileData);
                var imageFormat = WebImageHelper.ResolveImageFormat(sourceImage.ImageFormat);

                userImage.SourceHash = hash;
                userImage.SourceHeight = sourceImage.Height;
                userImage.SourceWidth = sourceImage.Width;

                var container = _fileUploadService.GetImageStorageContainer();

                if (uploadSettings.StoreSource)
                {
                    Uri sourceUri = null;
                    if (SaveImage(container, user, model.UserImageType, hash, "source", sourceImage, imageFormat, sourceImage.ImageFormat, out sourceUri) == false)
                    {
                        return null;
                    }
                    userImage.SourceUrl = RcConfiguration.Common.CdnEndpointUrl + sourceUri.AbsolutePath;
                }

                if (uploadSettings.StoreNormal)
                {
                    var normalImage = sourceImage.ResizeByMaxDimensionsWithStretch(uploadSettings.NormalWidth, uploadSettings.NormalHeight);

                    userImage.NormalHeight = normalImage.Height;
                    userImage.NormalWidth = normalImage.Width;

                    Uri normalUri = null;
                    if (SaveImage(container, user, model.UserImageType, hash, "page", normalImage, imageFormat, sourceImage.ImageFormat, out normalUri) == false)
                    {
                        return null;
                    }
                    userImage.NormalUrl = RcConfiguration.Common.CdnEndpointUrl + normalUri.AbsolutePath;
                }

                if (uploadSettings.StoreThumb)
                {
                    var thumbImage = sourceImage.CropAndResize(uploadSettings.ThumbWidth, uploadSettings.ThumbHeight);

                    userImage.ThumbHeight = thumbImage.Height;
                    userImage.ThumbWidth = thumbImage.Width;

                    Uri thumbUri = null;
                    if (SaveImage(container, user, model.UserImageType, hash, "thumb", thumbImage, imageFormat, sourceImage.ImageFormat, out thumbUri) == false)
                    {
                        return null;
                    }
                    userImage.ThumbUrl = RcConfiguration.Common.CdnEndpointUrl + thumbUri.AbsolutePath;
                }

                _session.Store(userImage);

                // save image to an object
                switch (model.UserImageType)
                {
                    default:
                        throw new ArgumentOutOfRangeException();
                }

            }
            catch (Exception exception)
            {
                _logger.Error(exception, "Error in processing image");
                return null;
            }
        }