Exemplo n.º 1
0
        public async Task <IActionResult> Image(string filename)
        {
            var invalidChars = Path.GetInvalidFileNameChars();

            if (filename.IndexOfAny(invalidChars) >= 0)
            {
                return(BadRequest("invalid filename"));
            }

            _logger.LogTrace($"Requesting image file {filename}");

            if (_blogConfig.ImageSettings.EnableCDNRedirect)
            {
                var imageUrl = _blogConfig.ImageSettings.CDNEndpoint.CombineUrl(filename);
                return(Redirect(imageUrl));
            }

            var image = await _cache.GetOrCreateAsync(filename, async entry =>
            {
                _logger.LogTrace($"Image file {filename} not on cache, fetching image...");

                entry.SlidingExpiration = TimeSpan.FromMinutes(_settings.CacheSlidingExpirationMinutes["Image"]);
                var imageInfo           = await _imageStorage.GetAsync(filename);
                return(imageInfo);
            });

            if (null == image)
            {
                return(NotFound());
            }

            return(File(image.ImageBytes, image.ImageContentType));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> GetImageAsync(string filename, [FromServices] IMemoryCache cache)
        {
            try
            {
                var invalidChars = Path.GetInvalidFileNameChars();
                if (filename.IndexOfAny(invalidChars) >= 0)
                {
                    Logger.LogWarning($"Invalid filename attempt '{filename}'.");
                    return(BadRequest("invalid filename"));
                }

                Logger.LogTrace($"Requesting image file {filename}");

                if (_cdnSettings.GetImageByCDNRedirect)
                {
                    var imageUrl = Utils.CombineUrl(_cdnSettings.CDNEndpoint, filename);
                    return(Redirect(imageUrl));
                }

                var imageEntry = await cache.GetOrCreateAsync(filename, async entry =>
                {
                    Logger.LogTrace($"Image file {filename} not on cache, fetching image...");

                    entry.SlidingExpiration = TimeSpan.FromMinutes(AppSettings.CacheSlidingExpirationMinutes["Image"]);
                    var imgBytesResponse    = await _imageStorage.GetAsync(filename);
                    return(imgBytesResponse);
                });

                if (imageEntry.IsSuccess)
                {
                    return(File(imageEntry.Item.ImageBytes, imageEntry.Item.ImageContentType));
                }

                Logger.LogError($"Error getting image, filename: {filename}, {imageEntry.Message}");

                return(_blogConfig.ContentSettings.UseFriendlyNotFoundImage
                    ? (IActionResult)File("~/images/image-not-found.png", "image/png")
                    : NotFound());
            }
            catch (Exception e)
            {
                Logger.LogError(e, $"Error requesting image {filename}");
                return(ServerError());
            }
        }
Exemplo n.º 3
0
        public async Task <IActionResult> Image(string filename, [FromServices] IMemoryCache cache)
        {
            try
            {
                var invalidChars = Path.GetInvalidFileNameChars();
                if (filename.IndexOfAny(invalidChars) >= 0)
                {
                    return(BadRequest("invalid filename"));
                }

                _logger.LogTrace($"Requesting image file {filename}");

                if (_imageStorageSettings.CDNSettings.EnableCDNRedirect)
                {
                    var imageUrl = _imageStorageSettings.CDNSettings.CDNEndpoint.CombineUrl(filename);
                    return(Redirect(imageUrl));
                }

                var imageEntry = await cache.GetOrCreateAsync(filename, async entry =>
                {
                    _logger.LogTrace($"Image file {filename} not on cache, fetching image...");

                    entry.SlidingExpiration = TimeSpan.FromMinutes(_settings.CacheSlidingExpirationMinutes["Image"]);
                    var imgBytesResponse    = await _imageStorage.GetAsync(filename);
                    return(imgBytesResponse);
                });

                if (null == imageEntry)
                {
                    return(NotFound());
                }

                return(File(imageEntry.ImageBytes, imageEntry.ImageContentType));
            }
            catch (Exception e)
            {
                _logger.LogError(e, $"Error requesting image {filename}");
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }
        }