// -------------------------------------------------------------------------------------------------------------------- // // Copyright (c) James South. // Licensed under the Apache License, Version 2.0. // // // The test image service. // // -------------------------------------------------------------------------------------------------------------------- namespace Test_Website_NET45 { using System; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using System.Web; using System.Web.Hosting; using ImageProcessor.Web.Helpers; using ImageProcessor.Web.Services; /// /// The test image service. /// public class TestImageService : IImageService { /// /// The prefix for the given implementation. /// private string prefix = "testprovider.axd"; /// /// Gets or sets the prefix for the given implementation. /// /// This value is used as a prefix for any image requests that should use this service. /// /// public string Prefix { get { return this.prefix; } set { this.prefix = value; } } /// /// Gets a value indicating whether the image service requests files from /// the locally based file system. /// public bool IsFileLocalService { get { return true; } } /// /// Gets or sets any additional settings required by the service. /// public Dictionary Settings { get; set; } /// /// Gets or sets the white list of . /// public Uri[] WhiteList { get; set; } /// /// Gets a value indicating whether the current request passes sanitizing rules. /// /// /// The image path. /// /// /// True if the request is valid; otherwise, False. /// public bool IsValidRequest(string path) { return ImageHelpers.IsValidImageExtension(path.Split(new[] { '&', '?' })[0]); } /// /// Gets the image using the given identifier. /// /// /// The value identifying the image to fetch. /// /// /// The array containing the image data. /// public async Task GetImage(object id) { const string AppData = "~/App_Data/images"; string imageRoot = HostingEnvironment.MapPath(AppData); if (imageRoot == null) { throw new HttpException(404, "No root path found to serve " + id); } // In this instance we are just processing a set path. // If you are using the querystring params as a means of identifying the correct image // then you can do something with it here. string path = Path.Combine(imageRoot, id.ToString().Split(new[] { '&', '?' })[0]); byte[] buffer; // Check to see if the file exists. // ReSharper disable once AssignNullToNotNullAttribute FileInfo fileInfo = new FileInfo(path); if (!fileInfo.Exists) { throw new HttpException(404, "Nothing found at " + id); } using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, true)) { buffer = new byte[file.Length]; await file.ReadAsync(buffer, 0, (int)file.Length); } return buffer; } } }