Exemple #1
0
        public UploadModel Upload(IEnumerable <HttpPostedFileBase> files, UploadModel listModel)
        {
            var model = HttpContext.Current.Session["Uploads"] != null ? HttpContext.Current.Session["Uploads"] as UploadModel : new UploadModel();

            int maxId = 0;
            int order = 0;

            var paintings = GetPaintings().Paintings;

            // Если в БД уже есть фотографии, значит получаем макс. Id фотографии
            if (paintings.Any())
            {
                maxId = paintings.Max(x => x.Id);
                order = paintings.Max(x => x.Order);
            }

            // Проверяем, имеются ли в сессии уже загруженные фотогарфии, если да, то берем за макс Id значение из сессии
            if (model.Uploads.Any())
            {
                maxId = model.Uploads.Max(x => x.Id);
                order = model.Uploads.Max(x => x.Order);
            }

            foreach (var file in files)
            {
                var filename = $"photo_Ph-S{++maxId}";

                var photoUploadModel = new PaintingUploadModel()
                {
                    Id            = maxId,
                    FileName      = filename,
                    PhotoPath     = AppDefaults.PhotoPath + filename + Path.GetExtension(file.FileName).ToLower(),
                    ThumbnailPath = AppDefaults.ThumbPath + filename + "s" + Path.GetExtension(file.FileName).ToLower(),
                    CreationDate  = TimeZone.CurrentTimeZone.ToLocalTime(DateTime.Now),
                    Order         = ++order
                };

                if (file.ContentLength < 4048576)
                {
                    if (file != null)
                    {
                        _imageProcessor.CreateThumbnail(file, 350, 350, filename);
                        file.SaveAs(HttpContext.Current.Server.MapPath(photoUploadModel.PhotoPath));
                        model.Uploads.Add(photoUploadModel);
                        HttpContext.Current.Session["Uploads"] = model;
                    }
                }
            }

            return(model);
        }
        public Photo UpdateOne(PhotoUploadModel model, HttpPostedFileBase file, IImageProcessor processor)
        {
            var photoToTags   = _providerPhotoToTag.GetAll();
            var relatedTagIds = photoToTags.GetRelatedTags(model.Id).Select(x => x.Id).ToArray();

            if (relatedTagIds.Length > 0)
            {
                _providerPhotoToTag.DeleteMany(relatedTagIds);
                _providerPhoto.Commit(); //TODO: продумать
            }

            if (file != null)
            {
                if (file.ContentLength != 0 && file.ContentLength < 4048576)
                {
                    processor.CreateThumbnail(file, 350, 350, model.FileName);
                    file.SaveAs(HttpContext.Current.Server.MapPath(model.PhotoPath));
                }
            }

            var photos = _providerPhoto.UpdateOne(_converter.ConvertTo(model));

            _providerWatermark.UpdateOne(_converterWatermark.ConvertTo(model.ImageAttributes));

            if (model.RelatedTagIds != null)
            {
                _providerPhotoToTag.AddMany(model.RelatedTagIds
                                            .Select(x => new PhotoToTag()
                {
                    Id      = 0,
                    PhotoId = model.Id,
                    TagId   = x
                }).ToArray()
                                            );
            }

            _providerPhoto.Commit();

            return(photos);
        }
Exemple #3
0
        public async Task <Result> Upload()
        {
            var filename = Request.Headers["x-filename"];

            if (string.IsNullOrEmpty(filename))
            {
                return(Result.Failure("Missing filename"));
            }

            if (Request.ContentLength == 0)
            {
                return(Result.Failure("Missing file contents"));
            }

            return(await Shield(async() =>
            {
                var originalContent = new byte[Request.ContentLength.GetValueOrDefault()];
                using (var memory = new MemoryStream(originalContent))
                {
                    await Request.Body.CopyToAsync(memory);
                }

                var visionAnalysisTask = _imageProcessor.ProcessPhoto(originalContent);
                var thumbnailContentTask = _imageProcessor.CreateThumbnail(originalContent);

                // run parallel independent APIs
                await Task.WhenAll(visionAnalysisTask, thumbnailContentTask);

                await _repository.Add(new Domain.Photo
                {
                    Name = filename,
                    OriginalContent = originalContent,
                    ThumbnailContent = thumbnailContentTask.Result,
                    VisionAnalysis = visionAnalysisTask.Result
                });
            }));
        }
        public PhotoUploadListModel Upload(IEnumerable <HttpPostedFileBase> files, PhotoUploadListModel listModel, IImageProcessor processor)
        {
            var model  = HttpContext.Current.Session["Uploads"] != null ? HttpContext.Current.Session["Uploads"] as PhotoUploadListModel : new PhotoUploadListModel();
            int maxId  = 0;
            int order  = 0;
            var photos = GetAll().ToList();

            // Если в БД уже есть фотографии, значит получаем макс. Id фотографии
            if (photos.Count > 0)
            {
                maxId = photos.Max(x => x.Id);
                order = photos.Max(x => x.Order);
            }

            // Проверяем, имеются ли в сессии уже загруженные фотогарфии, если да, то берем за макс Id значение из сессии
            if (model.Uploads.Any())
            {
                maxId = model.Uploads.Max(x => x.Id);
                order = model.Uploads.Max(x => x.Order);
            }

            foreach (var file in files)
            {
                var filename = $"photo_AS-S{++maxId}";

                var photoUploadModel = new PhotoUploadModel()
                {
                    Id              = maxId,
                    FileName        = filename,
                    PhotoPath       = "~/SysData/PhotoGallery/Photos/" + filename + Path.GetExtension(file.FileName).ToLower(),
                    ThumbnailPath   = "~/SysData/PhotoGallery/Thumbs/" + filename + "s" + Path.GetExtension(file.FileName).ToLower(),
                    CreationDate    = TimeZone.CurrentTimeZone.ToLocalTime(DateTime.Now),
                    ShowRandom      = false,
                    IsForBackground = false,
                    ImageAttributes = new ImageAttrModel()
                    {
                        Id                    = listModel.ImageAttributes.Id,
                        PhotoId               = 0,
                        IsWatermarkApplied    = listModel.ImageAttributes.IsWatermarkApplied,
                        IsWatermarkBlack      = listModel.ImageAttributes.IsWatermarkBlack,
                        IsSignatureApplied    = listModel.ImageAttributes.IsSignatureApplied,
                        IsSignatureBlack      = listModel.ImageAttributes.IsSignatureBlack,
                        IsWebSiteTitleApplied = listModel.ImageAttributes.IsWebSiteTitleApplied,
                        IsWebSiteTitleBlack   = listModel.ImageAttributes.IsWebSiteTitleBlack,
                        IsRightSide           = listModel.ImageAttributes.IsRightSide
                    },
                    Album = _providerAlbum.GetOne(listModel.AlbumId),
                    Order = ++order
                };

                if (file.ContentLength < 4048576)
                {
                    if (file != null)
                    {
                        processor.CreateThumbnail(file, 350, 350, filename);
                        photoUploadModel.ImageAttributes.PhotoId = photoUploadModel.Id;
                        file.SaveAs(HttpContext.Current.Server.MapPath(photoUploadModel.PhotoPath));
                        model.Uploads.Add(photoUploadModel);
                        HttpContext.Current.Session["Uploads"] = model;
                    }
                }
            }
            model.Albums = _providerAlbum.GetAll().Select(x => new SelectListItem()
            {
                Value = x.Id.ToString(),
                Text  = x.TitleRu
            });

            return(model);
        }