Exemple #1
0
        private IActionResult DeliverAsset(string appId, MediaItem?media, MediaFileQueryDto?query)
        {
            query ??= new MediaFileQueryDto();

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

            var resizeOptions = query.ToResizeOptions();

            FileCallback callback;

            if (query.CacheDuration > 0)
            {
                Response.Headers[HeaderNames.CacheControl] = $"public,max-age={query.CacheDuration}";
            }

            var contentLength = (long?)null;

            if (media.Type == MediaType.Image && resizeOptions.IsValid)
            {
                callback = async(bodyStream, range, ct) =>
                {
                    var resizedAsset = $"{appId}_{media.FileName}_{resizeOptions}";

                    if (query.ForceResize)
                    {
                        await ResizeAsync(appId, media, bodyStream, resizedAsset, resizeOptions, true, ct);
                    }
                    else
                    {
                        try
                        {
                            await assetStore.DownloadAsync(resizedAsset, bodyStream, ct : ct);
                        }
                        catch (AssetNotFoundException)
                        {
                            await ResizeAsync(appId, media, bodyStream, resizedAsset, resizeOptions, false, ct);
                        }
                    }
                };
            }
            else
            {
                contentLength = media.FileSize;

                callback = async(bodyStream, range, ct) =>
                {
                    await mediaFileStore.DownloadAsync(appId, media, bodyStream, range, ct);
                };
            }

            return(new FileCallbackResult(media.MimeType, callback)
            {
                EnableRangeProcessing = contentLength > 0,
                ErrorAs404 = true,
                FileDownloadName = media.FileName,
                FileSize = contentLength,
                SendInline = query.Download != 1
            });
        }