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()); } }
public async Task <IActionResult> Create(PhotoCreateModel model, int placeId) { await _service.CreatePhotos(model.Images, placeId); return(RedirectToAction("Details", "Place", new { id = placeId })); }
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())); }