Browse Source

Use inline disposition.

pull/498/head
Sebastian 7 years ago
parent
commit
b086f067e9
  1. 8
      backend/src/Squidex.Web/FileCallbackResult.cs
  2. 12
      backend/src/Squidex.Web/Pipeline/FileCallbackResultExecutor.cs
  3. 5
      backend/src/Squidex/Areas/Api/Controllers/Apps/AppsController.cs
  4. 14
      backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs
  5. 2
      backend/src/Squidex/Areas/Api/Controllers/Backups/BackupContentController.cs
  6. 2
      backend/src/Squidex/Areas/Api/Controllers/Statistics/UsagesController.cs
  7. 2
      backend/src/Squidex/Areas/Api/Controllers/Users/UsersController.cs

8
backend/src/Squidex.Web/FileCallbackResult.cs

@ -17,19 +17,19 @@ namespace Squidex.Web
{
public sealed class FileCallbackResult : FileResult
{
public bool Send404 { get; }
public bool Send404 { get; set; }
public bool SendInline { get; set; }
public Func<Stream, Task> Callback { get; }
public FileCallbackResult(string contentType, string? name, bool send404, Func<Stream, Task> callback)
public FileCallbackResult(string contentType, string? name, Func<Stream, Task> callback)
: base(contentType)
{
Guard.NotNull(callback);
FileDownloadName = name;
Send404 = send404;
Callback = callback;
}

12
backend/src/Squidex.Web/Pipeline/FileCallbackResultExecutor.cs

@ -10,13 +10,14 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Infrastructure;
using Microsoft.Extensions.Logging;
using Microsoft.Net.Http.Headers;
namespace Squidex.Web.Pipeline
{
public sealed class FileCallbackResultExecutor : FileResultExecutorBase
{
public FileCallbackResultExecutor(ILoggerFactory loggerFactory)
: base(CreateLogger<VirtualFileResultExecutor>(loggerFactory))
: base(CreateLogger<FileCallbackResultExecutor>(loggerFactory))
{
}
@ -26,6 +27,15 @@ namespace Squidex.Web.Pipeline
{
SetHeadersAndLog(context, result, null, false);
if (!string.IsNullOrWhiteSpace(result.FileDownloadName) && result.SendInline)
{
var headerValue = new ContentDispositionHeaderValue("inline");
headerValue.SetHttpFileName(result.FileDownloadName);
context.HttpContext.Response.Headers[HeaderNames.ContentDisposition] = headerValue.ToString();
}
await result.Callback(context.HttpContext.Response.Body);
}
catch (Exception e)

5
backend/src/Squidex/Areas/Api/Controllers/Apps/AppsController.cs

@ -250,7 +250,10 @@ namespace Squidex.Areas.Api.Controllers.Apps
}
});
return new FileCallbackResult(App.Image.MimeType, null, true, handler);
return new FileCallbackResult(App.Image.MimeType, null, handler)
{
Send404 = true
};
}
/// <summary>

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

@ -164,14 +164,14 @@ namespace Squidex.Areas.Api.Controllers.Assets
}
});
if (query.Download == 1)
{
return new FileCallbackResult(asset.MimeType, asset.FileName, true, handler);
}
else
var inline = query.Download != 1;
return new FileCallbackResult(asset.MimeType, asset.FileName, handler)
{
return new FileCallbackResult(asset.MimeType, null, true, handler);
}
LastModified = asset.LastModified.ToDateTimeOffset(),
Send404 = true,
SendInline = inline,
};
}
private async Task ResizeAsync(IAssetEntity asset, Stream bodyStream, string fileName, long fileVersion, ResizeOptions resizeOptions, bool overwrite)

2
backend/src/Squidex/Areas/Api/Controllers/Backups/BackupContentController.cs

@ -59,7 +59,7 @@ namespace Squidex.Areas.Api.Controllers.Backups
var fileName = $"backup-{app}-{backup.Started:yyyy-MM-dd_HH-mm-ss}.zip";
return new FileCallbackResult("application/zip", fileName, false, bodyStream =>
return new FileCallbackResult("application/zip", fileName, bodyStream =>
{
return backupArchiveStore.DownloadAsync(id, bodyStream);
});

2
backend/src/Squidex/Areas/Api/Controllers/Statistics/UsagesController.cs

@ -174,7 +174,7 @@ namespace Squidex.Areas.Api.Controllers.Statistics
var today = DateTime.UtcNow.Date;
return new FileCallbackResult("text/csv", $"Usage-{today:yyy-MM-dd}.csv", false, stream =>
return new FileCallbackResult("text/csv", $"Usage-{today:yyy-MM-dd}.csv", stream =>
{
return appLogStore.ReadLogAsync(Guid.Parse(appId), today.AddDays(-30), today, stream);
});

2
backend/src/Squidex/Areas/Api/Controllers/Users/UsersController.cs

@ -164,7 +164,7 @@ namespace Squidex.Areas.Api.Controllers.Users
{
if (entity.IsPictureUrlStored())
{
return new FileCallbackResult("image/png", null, false, async stream =>
return new FileCallbackResult("image/png", null, async stream =>
{
try
{

Loading…
Cancel
Save