Example #1
0
        public async Task <IHttpActionResult> SavePhoto()
        {
            var           request      = HttpContext.Current.Request;
            var           file         = request.Files["Image"];
            List <string> allowedTypes = new List <string>()
            {
                "image/jpeg",
                "image/png"
            };

            if (file == null && file.ContentLength == 0)
            {
                return(BadRequest("No file or file is empty."));
            }
            if (!allowedTypes.Contains(file.ContentType))
            {
                return(BadRequest("Type is not allowed."));
            }

            string     path          = AppDomain.CurrentDomain.BaseDirectory + "UploadedFiles/";
            string     categories    = request["CategoriesIds"];
            List <int> categoriesIds = new List <int>();

            if (categories != null)
            {
                var c = categories.Split(new char[] { ' ', ',', '/' });
                foreach (var item in c)
                {
                    if (int.TryParse(item, out _))
                    {
                        return(BadRequest("Categories Id cannot be parsed. Separate them by ' ', ',' or '/'."));
                    }
                }
                categoriesIds = c.Select(x => Convert.ToInt32(x)).ToList();
            }
            PhotoCreateModel photoCreate = new PhotoCreateModel()
            {
                StoragePath   = path,
                FileName      = file.FileName,
                File          = new byte[file.InputStream.Length],
                Description   = request["Description"],
                CategoriesIds = categoriesIds,
                IsPrivate     = request["IsPrivate"] == "true" ? true : false,
                UserId        = User.Identity.GetUserId()
            };
            await file.InputStream.ReadAsync(photoCreate.File, 0, photoCreate.File.Length);

            var result = await PhotoService.Create(photoCreate);

            if (!result.Succedeed)
            {
                return(BadRequest(result.Message));
            }
            else
            {
                return(Ok());
            }
        }
Example #2
0
        public async Task <IActionResult> Create(PhotoCreateModel model, int placeId)
        {
            await _service.CreatePhotos(model.Images, placeId);

            return(RedirectToAction("Details", "Place", new { id = placeId }));
        }
Example #3
0
        public async Task <OperationDetails> Create(PhotoCreateModel createModel)
        {
            if (createModel == null ||
                createModel.File == null ||
                createModel.File.Length == 0 ||
                createModel.FileName == null ||
                createModel.StoragePath == null ||
                createModel.UserId == null ||
                createModel.CategoriesIds == null)
            {
                return(new OperationDetails(false, "Model is not valid.", ""));
            }

            UserProfile user = Database.ProfileManager.Read(createModel.UserId);

            if (user == null)
            {
                return(new OperationDetails(false, "User not found", ""));
            }

            string        ext = "";
            List <string> allowedExtentions = new List <string>()
            {
                ".png", ".jpeg", ".jpg"
            };

            try
            {
                using (MemoryStream ms = new MemoryStream(createModel.File))
                {
                    Image.FromStream(ms);
                }
                ext = Path.GetExtension(createModel.FileName);
            }
            catch (ArgumentException ex)
            {
                return(new OperationDetails(false, "Image or filename is not valid.", ex.Message));
            }
            if (!allowedExtentions.Contains(ext))
            {
                return(new OperationDetails(false, "Valid formats are png and jpeg.", ""));
            }

            byte[] img = ResizeImage(createModel.File, 1000);
            if (img == null)
            {
                return(new OperationDetails(false, "Image cannot be saved.", ""));
            }

            List <Category> categories = new List <Category>();

            foreach (var catId in createModel.CategoriesIds)
            {
                Category category = Database.CategoryManager.Read(catId);
                if (category == null)
                {
                    return(new OperationDetails(false, "Category not found.", catId.ToString()));
                }
                categories.Add(category);
            }

            string filename = user.ApplicationUser.UserName + '_' + DateTime.UtcNow.ToString("yyyyMMddHHmmssff") + ext;
            string path     = Path.Combine(createModel.StoragePath, filename);

            Photo photo = new Photo()
            {
                Description    = createModel.Description,
                IsPrivate      = createModel.IsPrivate,
                Path           = path,
                Type           = ext == ".png" ? "image/png" : "image/jpeg",
                PublishingDate = DateTime.UtcNow,
                Categories     = categories,
                UserProfile    = user
            };

            try
            {
                Database.PhotoManager.Create(photo, img);
            }
            catch (IOException)
            {
                return(new OperationDetails(false, "Cannot get access to storage.", ""));
            }
            await Database.SaveAsync();

            return(new OperationDetails(true, "Photo saved.", photo.Id.ToString()));
        }