public ActionResult deleteImage(int listing, int image) { if (listing <= 0 && image <= 0) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } string user = User.Identity.GetUserId(); var listingImage = from c in db.ListingImages where c.Listing.OwnerId == user && c.ListingId == listing && c.ListingImageId == image select c; ListingImage lm = listingImage.FirstOrDefault(); if (lm == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } db.ListingImages.Remove(lm); db.SaveChanges(); string[] bases = { "~/Images/Listings/Big/", "~/Images/Listings/Med/", "~/Images/Listings/Small/" }; string file = ""; foreach (string imagesPath in bases) { if (System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(imagesPath + lm.Name))) { System.IO.File.Delete(System.Web.HttpContext.Current.Server.MapPath(imagesPath + lm.Name)); } file = imagesPath + lm.Name; } var json = new { listingId = lm.ListingId, imageId = lm.ListingImageId, file = file }; return(Json(json)); }
public async Task <ListingImage> AddImage(Guid listingId, byte[] imageContent, string imageMediaType) { if (imageContent == null) { throw new ArgumentNullException(nameof(imageContent)); } if (string.IsNullOrWhiteSpace(imageMediaType)) { throw new ArgumentException("Value cannot be null or whitespace.", nameof(imageMediaType)); } var listing = await _findListingCoordinator.Find(listingId); if (listing == null) { return(null); } var imageFileName = $"{Guid.NewGuid()}"; var url = await _imageStore.PersistArticleEntryMedia(imageFileName, imageContent, imageMediaType); var image = new ListingImage() { Listing = listing, ListingId = listingId, Url = url }; await _dbContext.Add(image); await _dbContext.SaveChanges(); return(image); }
private static void BulkLoadData(AgentPortalDBContext dbContext, ListingImage listingImage1) { for (int i = 0; i < 5; i++) { var listing = new Listing { Description = $"Test Listing {i}", Address = $"{i} Downing Street, London", AskingPrice = i * 10000m, NumberBedrooms = i, PostCode = "SW1X 7EE" }; dbContext.Listings.Add(listing); dbContext.SaveChanges(); for (int j = 0; j < 10; j++) { var listingImage = new ListingImage { ListingId = listing.Id, Listing = listing, Url = j % 2 == 0 ? "https://zooplapirantassessment.blob.core.windows.net/stock-images/3.jpg" : "https://zooplapirantassessment.blob.core.windows.net/stock-images/3.jpg" }; dbContext.Images.Add(listingImage); dbContext.SaveChanges(); } } }
public async Task <ActionResult <Listing> > CreateListing([FromForm] ListingCreateVM vm) { long size = vm.Images.Sum(f => f.Length); var city = await _context.Cities.SingleOrDefaultAsync(x => x.Name == vm.CityName); var user = await _context.Users.SingleOrDefaultAsync(x => x.Id == vm.UserId); var category = await _context.Categories.SingleOrDefaultAsync(x => x.CategoryName == vm.CategoryName); var listing = new Listing(vm, city, user, category); await _context.AddAsync(listing); foreach (var image in vm.Images) { if (image.Length > 0) { using (var memoryStream = new MemoryStream()) { await image.CopyToAsync(memoryStream); var arrImg = memoryStream.ToArray(); var img = new ListingImage(arrImg, listing); //listing.ListingImages.Add(img); await _context.AddAsync(img); } } } await _context.SaveChangesAsync(); return(Ok(new { count = vm.Images.Count, size })); }
public ActionResult Edit(int id, [Bind("Id, Description, Address, PostCode, PricePerMonth, NoOfBedrooms, NoOfBaths, OffStreetParking, LaundryAvailable, Files")] ApartmentListing apartmentListing) { if (id != apartmentListing.Id) { return(NotFound()); } // Check if the model is Valid if (ModelState.IsValid) { // Add More Images to the listing // Check if Files were selected for the Listing if (apartmentListing.Files != null) { // Check if files are all images i.e. jpeg, jpg, png, bmp if (_listingService.AllFilesAreImages(apartmentListing.Files)) { foreach (var formFile in apartmentListing.Files) { // Create a random file name for the Profile Image string randomFileName = Guid.NewGuid().ToString(); // Get the extension of the filename string imageExtension = _listingService.GetImageExtension($"{formFile.FileName}"); // Create the URL to the image string imageUrl = $"/images/listings/{randomFileName}{imageExtension}"; // Create an Image listing object var image = new ListingImage { ApartmentListing = apartmentListing, ImageUrl = imageUrl }; // Add the Image to the Listing's Images apartmentListing.Images.Append(image); // Copy the Image into the wwwroot/images/listings folder _listingService.UploadListingImage(randomFileName, imageExtension, formFile); } // Update and Save the listing _listingService.UpdateListing(apartmentListing); _listingService.SaveChanges(); // Alert that Listing has been Updated TempData["Success"] = "Listing Updated Successfully"; return(RedirectToAction("Edit", new { Id = id })); } // Alert Upload Images TempData["Message"] = "Accepted Extensions are .jpeg .jpg .png .bmp"; return(View(apartmentListing)); } if (apartmentListing.Files == null) { _listingService.UpdateListing(apartmentListing); } } return(View(apartmentListing)); }
public ListingImage Build() { var img = new ListingImage { Id = Id, ListingId = ListingId, Listing = Listing, Url = Url, }; return(img); }
public ActionResult Get(Guid listingId) { ListingImage img = _ctx.ListingImages.FirstOrDefault(li => li.listingId == listingId); if (null == img) { return(NotFound()); } else { return(File(img.image, img.contentType, img.fileName)); } }
public ActionResult imageX(int ListingId) { string desired_path = "~/Images/listings/"; string user = User.Identity.GetUserId(); var listQ = from c in db.Listings.Include("images") where c.ListingId == ListingId && c.OwnerId == user select c; Listing listing = listQ.FirstOrDefault(); if (listing == null) { return(Json(new { error = "Error uploading" })); } listing.Updated = DateTime.Now; db.Entry(listing).State = EntityState.Modified; db.SaveChanges(); if (listing.images.Count() >= maxImages) { // you need to delete images first return(Json(new { error = "Error uploading. Limit reached.", status = 403 })); } int x = 1; foreach (string fileName in Request.Files) { HttpPostedFileBase posted_file = Request.Files[fileName]; if (posted_file != null && posted_file.ContentLength > 0) { //create random file name from guid and upload/save string desired_file_name = ListingId + "_" + System.Guid.NewGuid().ToString("N") + Path.GetExtension(posted_file.FileName); bool file_uploaded = TMLib.TMImage.renameUploadFile(posted_file, desired_path + "/Big", desired_file_name, 900); bool med_iplod = TMLib.TMImage.renameUploadFile(posted_file, desired_path + "/Med", desired_file_name, 600); bool thumb_upload = TMLib.TMImage.renameUploadFile(posted_file, desired_path + "/Small", desired_file_name, 200); if (file_uploaded) { ListingImage li = new ListingImage(); li.ListingId = ListingId; li.Listing = listing; li.Name = desired_file_name; li.DisplayOrder = x++; li.Created = DateTime.Now; db.ListingImages.Add(li); db.SaveChanges(); } } //else there's no valid file uploaded. handle situation here } //return Json(new { error = "Error uploading. Limit reached.", status = 403 }); return(Json(new { Message = "Uploaded" })); }
public async Task <ActionResult <string> > EditListing([FromRoute] Guid id, [FromForm] string title, [FromForm] string description, [FromForm] decimal?price, [FromForm] ListingImageCreateVM[] photos, [FromForm] bool status, [FromForm] string userId) { var listing = await _context.Listings.SingleOrDefaultAsync(x => x.Id == id); if (listing == null) { return(BadRequest("Id not found")); } else if (listing.UserId != userId) { return(BadRequest("User id does not match listing")); } if (title != null) { listing.Title = title; } if (description != null) { listing.Description = description; } if (price != null) { listing.Price = (decimal)price; } if (photos != null) { var all_listings_matching = await _context.ListingImages.Where(x => x.ListingId == listing.Id).ToListAsync(); _context.RemoveRange(all_listings_matching); //expect patch with all the images the user wants, so remove the old ones foreach (var photo in photos) { var img = new ListingImage(photo, listing); try { await _context.ListingImages.AddAsync(img); listing.ListingImages.Add(img); } catch (System.InvalidOperationException e) { Console.WriteLine(e.Message); } } } var result = await _context.SaveChangesAsync(); return(Ok(result)); }
public ActionResult Delete(Guid listingId) { ListingImage img = _ctx.ListingImages.FirstOrDefault(li => li.listingId == listingId); if (null == img) { return(NotFound()); } else { _ctx.ListingImages.Remove(img); _ctx.SaveChanges(); return(NoContent()); } }
public static ListingImage GetListingImageFile(HttpPostedFileBase upload) { var listingImage = new ListingImage { FileName = Path.GetFileName(upload.FileName), ContentType = upload.ContentType, Content = GetFileBytes(upload) }; var contentArray = listingImage.Content; listingImage.ThumbnailContent = GetThumbnailFileBytes(contentArray); return(listingImage); }
private ListingImageResponse MapListingImageResponse(ListingImage image, Guid listingId) { Link[] links = { new Link { Relation = LinkRelValueObject.SELF, Href = Url.Action(nameof(GetImages), new { listingId = listingId }) }, new Link { Relation = LinkRelValueObject.LISTING, Href = Url.Action("GetListing", "Listings", new { listingId = listingId }) } }; return(new ListingImageResponse() { Id = image.Id, Url = image.Url, ListingId = listingId, Links = links }); }
public ListingDTO updateListing(Guid key, ListingCreateOrUpdate update) { Listing original = _ctx.Listings.AsNoTracking().FirstOrDefault(p => p.id == key); User currentUser = _currentUserService.GetCurrentUser(); if (null != update.tags) { foreach (ListingTag doomedTag in _ctx.ListingTags.Where(t => t.listingId == key)) { _ctx.ListingTags.Remove(doomedTag); } foreach (string tag in update.tags) { _ctx.ListingTags.Add(new ListingTag() { name = tag, listingId = key }); } } if (null != update.image && FileHelper.IsImage(update.image)) { ListingImage existing = _ctx.ListingImages.FirstOrDefault(li => li.listingId == key); if (null != existing) { _ctx.ListingImages.Remove(existing); } byte[] fileContents = null; using (var fs1 = update.image.OpenReadStream()) using (var ms1 = new MemoryStream()) { fs1.CopyTo(ms1); fileContents = ms1.ToArray(); } _ctx.ListingImages.Add(new ListingImage() { listingId = key, contentType = update.image.ContentType, image = fileContents, fileName = Path.GetFileName(update.image.FileName) }); } original.name = update.name; original.description = update.description; original.modified = DateTime.UtcNow; original.price = update.price; _ctx.Entry(original).State = EntityState.Modified; _ctx.SaveChanges(); Listing result = _ctx.Listings .Include(l => l.user) .Include(l => l.tags) .Where(l => l.id == key) .FirstOrDefault(); return(_mapper.Map <ListingDTO>(result)); }
public ActionResult ShowOtherImages(ListingImage image, string stateCode) { var listingImage = serviceUtils.PopulateOtherImagesForListing(image, stateCode); return(PartialView("OtherImages", listingImage)); }
public async Task <ActionResult> Create([Bind("Id, Description, Address, PostCode, PricePerMonth, NoOfBedrooms, NoOfBaths, OffStreetParking, LaundryAvailable, Files")] ApartmentListing apartmentListing) { // Check if the model is Valid if (ModelState.IsValid) { // Check if Files were selected for the Listing if (apartmentListing.Files != null) { // Check if files are all images i.e. jpeg, jpg, png, bmp if (_listingService.AllFilesAreImages(apartmentListing.Files)) { // Create an empty IEnumerable of Listing Images IEnumerable <ListingImage> Images = Enumerable.Empty <ListingImage>(); foreach (var formFile in apartmentListing.Files) { // Create a random file name for the Profile Image string randomFileName = Guid.NewGuid().ToString(); // Get the extension of the filename string imageExtension = _listingService.GetImageExtension($"{formFile.FileName}"); // Create the URL to the image string imageUrl = $"/images/listings/{randomFileName}{imageExtension}"; // Create an Image listing object var image = new ListingImage { ApartmentListing = apartmentListing, ImageUrl = imageUrl }; // Add the Image to IEnumerator of Listing Images Images.Append(image); // Copy the Image into the wwwroot/images/listings folder _listingService.UploadListingImage(randomFileName, imageExtension, formFile); } // Assign Images apartmentListing.Images = Images; // Get and Assign User var currentUser = await _userManager.GetUserAsync(User); apartmentListing.User = currentUser; // Get and Assign Current time var currentTime = DateTime.Now; apartmentListing.DateCreated = currentTime; // Get the Category // Add and Save the listing _listingService.AddListing(apartmentListing); _listingService.SaveChanges(); // Alert that Appartment Listing has been created // Redirect to the index of Listing Controller return(RedirectToAction(nameof(Index))); } // Alert Upload Images TempData["Message"] = "Accepted Extensions are .jpeg .jpg .png .bmp"; return(View(apartmentListing)); } // Alert Upload Images TempData["Message"] = "Select Photo(s) for your Listing "; return(View(apartmentListing)); } return(View(apartmentListing)); }
private void SeedTestData(AgentPortalDBContext dbContext) { var listing1 = new Listing { Description = "One Hyde Park, 100", Address = "100 Knightsbridge, London", AskingPrice = 200000000m, NumberBedrooms = 10, PostCode = "SW1X 7LJ", }; var listing2 = new Listing { Description = "72 Vincent Square", Address = "Westminster, London", AskingPrice = 100000000m, NumberBedrooms = 8, PostCode = "SW1P 2PA", }; var listing3 = new Listing { Description = "Belgravia Gate", Address = "Belgravia, London", AskingPrice = 100000000m, NumberBedrooms = 5, PostCode = "SW1X 7EE" }; var listing4 = new Listing { Description = "Ashurst Road", Address = "Ashurst Road, London", AskingPrice = 100000000m, NumberBedrooms = 5, PostCode = "N12 9AH" }; dbContext.Listings.Add(listing1); dbContext.Listings.Add(listing2); dbContext.Listings.Add(listing3); dbContext.Listings.Add(listing4); dbContext.SaveChanges(); var listingImage1 = new ListingImage { ListingId = listing1.Id, Listing = listing1, Url = "https://zooplapirantassessment.blob.core.windows.net/stock-images/1.jpg" }; var listingImage2 = new ListingImage { ListingId = listing2.Id, Listing = listing2, Url = "https://zooplapirantassessment.blob.core.windows.net/stock-images/2.jpg" }; var listingImage3 = new ListingImage { ListingId = listing3.Id, Listing = listing3, Url = "https://zooplapirantassessment.blob.core.windows.net/stock-images/3.jpg" }; dbContext.Images.Add(listingImage1); dbContext.Images.Add(listingImage2); dbContext.Images.Add(listingImage3); dbContext.SaveChanges(); //BulkLoadData(dbContext, listingImage1); }