Browse Source

Force resize with query parameter.

pull/492/head
Sebastian 6 years ago
parent
commit
b3bd7c4c9f
  1. 70
      backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs
  2. 6
      backend/src/Squidex/Areas/Api/Controllers/Assets/Models/AssetQuery.cs

70
backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs

@ -142,39 +142,19 @@ namespace Squidex.Areas.Api.Controllers.Assets
{
var resizedAsset = $"{asset.Id}_{asset.FileVersion}_{resizeOptions}";
try
if (query.ForceResize)
{
await assetStore.DownloadAsync(resizedAsset, bodyStream);
await ResizeAsync(asset, bodyStream, resizedAsset, fileVersion, resizeOptions, true);
}
catch (AssetNotFoundException)
else
{
using (Profiler.Trace("Resize"))
try
{
using (var sourceStream = GetTempStream())
{
using (var destinationStream = GetTempStream())
{
using (Profiler.Trace("ResizeDownload"))
{
await assetFileStore.DownloadAsync(asset.Id, fileVersion, sourceStream);
sourceStream.Position = 0;
}
using (Profiler.Trace("ResizeImage"))
{
await assetThumbnailGenerator.CreateThumbnailAsync(sourceStream, destinationStream, resizeOptions);
destinationStream.Position = 0;
}
using (Profiler.Trace("ResizeUpload"))
{
await assetStore.UploadAsync(resizedAsset, destinationStream);
destinationStream.Position = 0;
}
await destinationStream.CopyToAsync(bodyStream);
}
}
await assetStore.DownloadAsync(resizedAsset, bodyStream);
}
catch (AssetNotFoundException)
{
await ResizeAsync(asset, bodyStream, resizedAsset, fileVersion, resizeOptions, false);
}
}
}
@ -194,6 +174,38 @@ namespace Squidex.Areas.Api.Controllers.Assets
}
}
private async Task ResizeAsync(IAssetEntity asset, Stream bodyStream, string fileName, long fileVersion, ResizeOptions resizeOptions, bool overwrite)
{
using (Profiler.Trace("Resize"))
{
using (var sourceStream = GetTempStream())
{
using (var destinationStream = GetTempStream())
{
using (Profiler.Trace("ResizeDownload"))
{
await assetFileStore.DownloadAsync(asset.Id, fileVersion, sourceStream);
sourceStream.Position = 0;
}
using (Profiler.Trace("ResizeImage"))
{
await assetThumbnailGenerator.CreateThumbnailAsync(sourceStream, destinationStream, resizeOptions);
destinationStream.Position = 0;
}
using (Profiler.Trace("ResizeUpload"))
{
await assetStore.UploadAsync(fileName, destinationStream, overwrite);
destinationStream.Position = 0;
}
await destinationStream.CopyToAsync(bodyStream);
}
}
}
}
private static FileStream GetTempStream()
{
var tempFileName = Path.GetTempFileName();

6
backend/src/Squidex/Areas/Api/Controllers/Assets/Models/AssetQuery.cs

@ -75,6 +75,12 @@ namespace Squidex.Areas.Api.Controllers.Assets.Models
[FromQuery(Name = "nofocus")]
public bool IgnoreFocus { get; set; }
/// <summary>
/// True to force a new resize even if it already stored.
/// </summary>
[FromQuery(Name = "force")]
public bool ForceResize { get; set; }
public ResizeOptions? ToResizeOptions(IAssetEntity asset)
{
Guard.NotNull(asset);

Loading…
Cancel
Save