// Uploads image to blob storage and posts CabinImage to DB public async Task <IActionResult> Upload(CabinImage cabinImage) { try { if (cabinImage.Files == null) { return(RedirectToAction("Upload", new { cabinId = cabinImage.CabinId, errorMessage = true })); } var imageName = $"{Guid.NewGuid().ToString()}"; cabinImage.ImageUrl = imageName; CloudBlockBlob blockBlob = _container.GetBlockBlobReference(imageName); blockBlob.Properties.ContentType = cabinImage.Files.ContentType; await using (var data = cabinImage.Files.OpenReadStream()) { await blockBlob.UploadFromStreamAsync(data); } cabinImage.Files = null; var postCabinImage = await _service.PostCabinImage(User, cabinImage); if (!postCabinImage) { return(View("ErrorPage")); } return(RedirectToAction("Upload", new { cabinId = cabinImage.CabinId })); } catch { return(View("ErrorPage")); } }
public async Task <ActionResult <CabinImage> > PostCabinImage(CabinImage cabinImage) { try { // If CabinOwner, check that he can create Cabin only by own PersonId if (User.IsInRole("CabinOwner")) { var checkPerson = await _context.Person.Where(person => person.Email == User.Identity.Name).FirstOrDefaultAsync(); var cabin = await _context.Cabin.Where(cabin => cabin.CabinId == cabinImage.CabinId).FirstOrDefaultAsync(); if (cabin.PersonId != checkPerson.PersonId) { return(Unauthorized()); } } // Return BadRequest if cabin has already 4 images var cabinImages = await _context.CabinImage.Where(cImage => cImage.CabinId == cabinImage.CabinId).ToListAsync(); if (cabinImages.Count() >= 4) { return(BadRequest()); } _context.CabinImage.Add(cabinImage); await _context.SaveChangesAsync(); return(NoContent()); } catch { return(StatusCode(500)); } }
//------------------------------------------------------------------------------------------------- Cabins End //------------------------------------------------------------------------------------------------- CabinImages // Executes API Post-Call by User and CabinImage // Returns true if CabinImage created success public async Task <bool> PostCabinImage(ClaimsPrincipal user, CabinImage cabinImage) { var token = GenerateToken(user); defaultClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token); string url = ApiUrls.CabinImageBase; var response = await defaultClient.PostAsync(url, cabinImage, new JsonMediaTypeFormatter()); return(response.IsSuccessStatusCode ? true : false); }