Files
ProductiveAspNetMvc/Ch02/02_03_End/Website/Controllers/ImagesController.cs
Jess Chadwick 20458e435e Exercise Files
2018-06-07 00:03:24 -04:00

82 lines
2.1 KiB
C#

using System.Linq;
using System.Web.Mvc;
using HPlusSports.Models;
namespace HPlusSports.Controllers
{
public class ImagesController : Controller
{
private readonly HPlusSportsDbContext _context;
public ImagesController()
: this(new HPlusSportsDbContext())
{
}
public ImagesController(HPlusSportsDbContext context)
{
_context = context;
}
// /images/category/{SKU}
// Redirects to the main image for a category
public ActionResult Category(string id)
{
var imageId =
_context.Categories
.Where(x => x.Key == id)
.Select(x => x.ImageId)
.FirstOrDefault();
return Image(imageId);
}
// /images/product/{SKU}
// Redirects to the main image for a product
public ActionResult Product(string id)
{
var imageId =
_context.Products
.Where(x => x.SKU == id)
.SelectMany(x => x.Images.Select(img => img.Id))
.FirstOrDefault();
return Image(imageId);
}
public ActionResult Image(long? id)
{
var image = _context.Images.FirstOrDefault(x => x.Id == id);
if (!string.IsNullOrWhiteSpace(image.Url))
{
return RedirectPermanent(image.Url);
}
if (image?.Content == null)
{
image = GetPlaceholderImage();
}
return File(image.Content, image.ContentType);
}
internal static volatile byte[] PlaceholderImageContent;
private Image GetPlaceholderImage()
{
if (PlaceholderImageContent == null)
{
var path = Server.MapPath("~/Content/placeholder.jpg");
PlaceholderImageContent = System.IO.File.ReadAllBytes(path);
}
return new Image
{
Content = PlaceholderImageContent,
ContentType = "image/jpeg"
};
}
}
}