|
|
@ -60,7 +60,7 @@ namespace Squidex.Areas.Api.Controllers.Assets |
|
|
/// <param name="app">The name of the app.</param>
|
|
|
/// <param name="app">The name of the app.</param>
|
|
|
/// <param name="idOrSlug">The id or slug of the asset.</param>
|
|
|
/// <param name="idOrSlug">The id or slug of the asset.</param>
|
|
|
/// <param name="more">Optional suffix that can be used to seo-optimize the link to the image Has not effect.</param>
|
|
|
/// <param name="more">Optional suffix that can be used to seo-optimize the link to the image Has not effect.</param>
|
|
|
/// <param name="query">The query string parameters.</param>
|
|
|
/// <param name="queries">The query string parameters.</param>
|
|
|
/// <returns>
|
|
|
/// <returns>
|
|
|
/// 200 => Asset found and content or (resized) image returned.
|
|
|
/// 200 => Asset found and content or (resized) image returned.
|
|
|
/// 404 => Asset or app not found.
|
|
|
/// 404 => Asset or app not found.
|
|
|
@ -71,7 +71,7 @@ namespace Squidex.Areas.Api.Controllers.Assets |
|
|
[ApiPermission] |
|
|
[ApiPermission] |
|
|
[ApiCosts(0.5)] |
|
|
[ApiCosts(0.5)] |
|
|
[AllowAnonymous] |
|
|
[AllowAnonymous] |
|
|
public async Task<IActionResult> GetAssetContentBySlug(string app, string idOrSlug, string more, [FromQuery] AssetContentQueryDto query) |
|
|
public async Task<IActionResult> GetAssetContentBySlug(string app, string idOrSlug, string more, [FromQuery] AssetContentQueryDto queries) |
|
|
{ |
|
|
{ |
|
|
IAssetEntity? asset; |
|
|
IAssetEntity? asset; |
|
|
|
|
|
|
|
|
@ -84,14 +84,14 @@ namespace Squidex.Areas.Api.Controllers.Assets |
|
|
asset = await assetRepository.FindAssetBySlugAsync(App.Id, idOrSlug); |
|
|
asset = await assetRepository.FindAssetBySlugAsync(App.Id, idOrSlug); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return await DeliverAssetAsync(asset, query); |
|
|
return await DeliverAssetAsync(asset, queries); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
/// <summary>
|
|
|
/// Get the asset content.
|
|
|
/// Get the asset content.
|
|
|
/// </summary>
|
|
|
/// </summary>
|
|
|
/// <param name="id">The id of the asset.</param>
|
|
|
/// <param name="id">The id of the asset.</param>
|
|
|
/// <param name="query">The query string parameters.</param>
|
|
|
/// <param name="queries">The query string parameters.</param>
|
|
|
/// <returns>
|
|
|
/// <returns>
|
|
|
/// 200 => Asset found and content or (resized) image returned.
|
|
|
/// 200 => Asset found and content or (resized) image returned.
|
|
|
/// 404 => Asset or app not found.
|
|
|
/// 404 => Asset or app not found.
|
|
|
@ -102,16 +102,16 @@ namespace Squidex.Areas.Api.Controllers.Assets |
|
|
[ApiPermission] |
|
|
[ApiPermission] |
|
|
[ApiCosts(0.5)] |
|
|
[ApiCosts(0.5)] |
|
|
[AllowAnonymous] |
|
|
[AllowAnonymous] |
|
|
public async Task<IActionResult> GetAssetContent(Guid id, [FromQuery] AssetContentQueryDto query) |
|
|
public async Task<IActionResult> GetAssetContent(Guid id, [FromQuery] AssetContentQueryDto queries) |
|
|
{ |
|
|
{ |
|
|
var asset = await assetRepository.FindAssetAsync(id); |
|
|
var asset = await assetRepository.FindAssetAsync(id); |
|
|
|
|
|
|
|
|
return await DeliverAssetAsync(asset, query); |
|
|
return await DeliverAssetAsync(asset, queries); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private async Task<IActionResult> DeliverAssetAsync(IAssetEntity? asset, AssetContentQueryDto query) |
|
|
private async Task<IActionResult> DeliverAssetAsync(IAssetEntity? asset, AssetContentQueryDto queries) |
|
|
{ |
|
|
{ |
|
|
query ??= new AssetContentQueryDto(); |
|
|
queries ??= new AssetContentQueryDto(); |
|
|
|
|
|
|
|
|
if (asset == null) |
|
|
if (asset == null) |
|
|
{ |
|
|
{ |
|
|
@ -123,20 +123,20 @@ namespace Squidex.Areas.Api.Controllers.Assets |
|
|
return StatusCode(403); |
|
|
return StatusCode(403); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (query.Version > EtagVersion.Any && asset.Version != query.Version) |
|
|
if (queries.Version > EtagVersion.Any && asset.Version != queries.Version) |
|
|
{ |
|
|
{ |
|
|
asset = await assetLoader.GetAsync(asset.Id, query.Version); |
|
|
asset = await assetLoader.GetAsync(asset.Id, queries.Version); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
var resizeOptions = query.ToResizeOptions(asset); |
|
|
var resizeOptions = queries.ToResizeOptions(asset); |
|
|
|
|
|
|
|
|
FileCallback callback; |
|
|
FileCallback callback; |
|
|
|
|
|
|
|
|
Response.Headers[HeaderNames.ETag] = asset.FileVersion.ToString(); |
|
|
Response.Headers[HeaderNames.ETag] = asset.FileVersion.ToString(); |
|
|
|
|
|
|
|
|
if (query.CacheDuration > 0) |
|
|
if (queries.CacheDuration > 0) |
|
|
{ |
|
|
{ |
|
|
Response.Headers[HeaderNames.CacheControl] = $"public,max-age={query.CacheDuration}"; |
|
|
Response.Headers[HeaderNames.CacheControl] = $"public,max-age={queries.CacheDuration}"; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
var contentLength = (long?)null; |
|
|
var contentLength = (long?)null; |
|
|
@ -147,7 +147,7 @@ namespace Squidex.Areas.Api.Controllers.Assets |
|
|
{ |
|
|
{ |
|
|
var resizedAsset = $"{asset.Id}_{asset.FileVersion}_{resizeOptions}"; |
|
|
var resizedAsset = $"{asset.Id}_{asset.FileVersion}_{resizeOptions}"; |
|
|
|
|
|
|
|
|
if (query.ForceResize) |
|
|
if (queries.ForceResize) |
|
|
{ |
|
|
{ |
|
|
await ResizeAsync(asset, bodyStream, resizedAsset, resizeOptions, true, ct); |
|
|
await ResizeAsync(asset, bodyStream, resizedAsset, resizeOptions, true, ct); |
|
|
} |
|
|
} |
|
|
@ -181,7 +181,7 @@ namespace Squidex.Areas.Api.Controllers.Assets |
|
|
FileDownloadName = asset.FileName, |
|
|
FileDownloadName = asset.FileName, |
|
|
FileSize = contentLength, |
|
|
FileSize = contentLength, |
|
|
LastModified = asset.LastModified.ToDateTimeOffset(), |
|
|
LastModified = asset.LastModified.ToDateTimeOffset(), |
|
|
SendInline = query.Download != 1 |
|
|
SendInline = queries.Download != 1 |
|
|
}; |
|
|
}; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|