/// <summary> /// Populates the auto-fill properties of a content item, for a specified auto-fill configuration. /// </summary> /// <param name="content">The content item.</param> /// <param name="autoFillConfig">The auto-fill configuration.</param> /// <param name="filepath">The filesystem path to the uploaded file.</param> /// <remarks>The <paramref name="filepath"/> parameter is the path relative to the filesystem.</remarks> /// <param name="culture">Variation language.</param> /// <param name="segment">Variation segment.</param> public void Populate(IContentBase content, IImagingAutoFillUploadField autoFillConfig, string filepath, string culture, string segment) { if (content == null) { throw new ArgumentNullException(nameof(content)); } if (autoFillConfig == null) { throw new ArgumentNullException(nameof(autoFillConfig)); } // no file = reset, file = auto-fill if (filepath.IsNullOrWhiteSpace()) { ResetProperties(content, autoFillConfig, culture, segment); } else { // if anything goes wrong, just reset the properties try { using (var filestream = _mediaFileSystem.OpenFile(filepath)) { var extension = (Path.GetExtension(filepath) ?? "").TrimStart('.'); var size = _contentSection.IsImageFile(extension) ? (Size?)ImageHelper.GetDimensions(filestream) : null; SetProperties(content, autoFillConfig, size, filestream.Length, extension, culture, segment); } } catch (Exception ex) { _logger.Error(typeof(UploadAutoFillProperties), ex, "Could not populate upload auto-fill properties for file '{File}'.", filepath); ResetProperties(content, autoFillConfig, culture, segment); } } }
/// <summary> /// Gets a resized image for the image at the given path /// </summary> /// <param name="imagePath"></param> /// <param name="width"></param> /// <returns></returns> /// <remarks> /// If there is no media, image property or image file is found then this will return not found. /// </remarks> public HttpResponseMessage GetResized(string imagePath, int width) { var ext = Path.GetExtension(imagePath); // we need to check if it is an image by extension if (_contentSection.IsImageFile(ext) == false) { return(Request.CreateResponse(HttpStatusCode.NotFound)); } //redirect to ImageProcessor thumbnail with rnd generated from last modified time of original media file var response = Request.CreateResponse(HttpStatusCode.Found); var imageLastModified = _mediaFileSystem.GetLastModified(imagePath); response.Headers.Location = new Uri($"{imagePath}?rnd={imageLastModified:yyyyMMddHHmmss}&upscale=false&width={width}&animationprocessmode=first&mode=max", UriKind.Relative); return(response); }
/// <summary> /// Gets a resized image for the image at the given path /// </summary> /// <param name="imagePath"></param> /// <param name="width"></param> /// <returns></returns> /// <remarks> /// If there is no media, image property or image file is found then this will return not found. /// </remarks> public HttpResponseMessage GetResized(string imagePath, int width) { var ext = Path.GetExtension(imagePath); // we need to check if it is an image by extension if (_contentSection.IsImageFile(ext) == false) { return(Request.CreateResponse(HttpStatusCode.NotFound)); } //redirect to ImageProcessor thumbnail with rnd generated from last modified time of original media file var response = Request.CreateResponse(HttpStatusCode.Found); DateTimeOffset?imageLastModified = null; try { imageLastModified = _mediaFileSystem.GetLastModified(imagePath); } catch (Exception) { // if we get an exception here it's probably because the image path being requested is an image that doesn't exist // in the local media file system. This can happen if someone is storing an absolute path to an image online, which // is perfectly legal but in that case the media file system isn't going to resolve it. // so ignore and we won't set a last modified date. } var rnd = imageLastModified.HasValue ? $"&rnd={imageLastModified:yyyyMMddHHmmss}" : null; var imageUrl = _imageUrlGenerator.GetImageUrl(new ImageUrlGenerationOptions(imagePath) { UpScale = false, Width = width, AnimationProcessMode = "first", ImageCropMode = "max", CacheBusterValue = rnd }); response.Headers.Location = new Uri(imageUrl, UriKind.RelativeOrAbsolute); return(response); }