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 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 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) : base(contentType)
{ {
Guard.NotNull(callback); Guard.NotNull(callback);
FileDownloadName = name; FileDownloadName = name;
Send404 = send404;
Callback = callback; 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;
using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.AspNetCore.Mvc.Infrastructure;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Net.Http.Headers;
namespace Squidex.Web.Pipeline namespace Squidex.Web.Pipeline
{ {
public sealed class FileCallbackResultExecutor : FileResultExecutorBase public sealed class FileCallbackResultExecutor : FileResultExecutorBase
{ {
public FileCallbackResultExecutor(ILoggerFactory loggerFactory) 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); 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); await result.Callback(context.HttpContext.Response.Body);
} }
catch (Exception e) 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> /// <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) var inline = query.Download != 1;
{
return new FileCallbackResult(asset.MimeType, asset.FileName, true, handler); return new FileCallbackResult(asset.MimeType, asset.FileName, handler)
}
else
{ {
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) 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"; 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); 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; 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); 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()) if (entity.IsPictureUrlStored())
{ {
return new FileCallbackResult("image/png", null, false, async stream => return new FileCallbackResult("image/png", null, async stream =>
{ {
try try
{ {

Loading…
Cancel
Save