Include modified date in image responses for cachecontrol
This commit is contained in:
parent
b7bc04a045
commit
3f37eefe72
@ -5,6 +5,8 @@ using System.Text.RegularExpressions;
|
|||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using SixLabors.ImageSharp;
|
using SixLabors.ImageSharp;
|
||||||
using SixLabors.ImageSharp.Formats.Png;
|
using SixLabors.ImageSharp.Formats.Png;
|
||||||
|
using SixLabors.ImageSharp.Metadata.Profiles.Exif;
|
||||||
|
using SixLabors.ImageSharp.Metadata.Profiles.Iptc;
|
||||||
using ZstdSharp;
|
using ZstdSharp;
|
||||||
|
|
||||||
namespace Tranga.Server;
|
namespace Tranga.Server;
|
||||||
@ -215,20 +217,33 @@ public partial class Server : GlobalBase, IDisposable
|
|||||||
if (content is Stream stream)
|
if (content is Stream stream)
|
||||||
{
|
{
|
||||||
response.ContentType = "text/plain";
|
response.ContentType = "text/plain";
|
||||||
response.AddHeader("Cache-Control", "no-store");
|
response.AddHeader("Cache-Control", "private, no-store");
|
||||||
stream.CopyTo(compressor);
|
stream.CopyTo(compressor);
|
||||||
stream.Close();
|
stream.Close();
|
||||||
}else if (content is Image image)
|
}else if (content is Image image)
|
||||||
{
|
{
|
||||||
response.ContentType = image.Metadata.DecodedImageFormat?.DefaultMimeType ?? PngFormat.Instance.DefaultMimeType;
|
response.ContentType = image.Metadata.DecodedImageFormat?.DefaultMimeType ?? PngFormat.Instance.DefaultMimeType;
|
||||||
response.AddHeader("Cache-Control", "max-age=600");
|
response.AddHeader("Cache-Control", "public, max-age=3600");
|
||||||
|
string lastModifiedStr = "";
|
||||||
|
if (image.Metadata.IptcProfile is not null)
|
||||||
|
{
|
||||||
|
DateTime date = DateTime.ParseExact(image.Metadata.IptcProfile.GetValues(IptcTag.CreatedDate).First().Value, "yyyyMMdd",null);
|
||||||
|
DateTime time = DateTime.ParseExact(image.Metadata.IptcProfile.GetValues(IptcTag.CreatedTime).First().Value, "HHmmssK",null);
|
||||||
|
lastModifiedStr = $"{date:ddd\\,\\ dd\\ MMM\\ yyyy} {time:HH\\:mm\\:ss} GMT";
|
||||||
|
}else if (image.Metadata.ExifProfile is not null)
|
||||||
|
{
|
||||||
|
DateTime datetime = DateTime.ParseExact(image.Metadata.ExifProfile.Values.FirstOrDefault(value => value.Tag == ExifTag.DateTime)?.ToString() ?? "2000:01:01 01:01:01", "yyyy:MM:dd HH:mm:ss", null);
|
||||||
|
lastModifiedStr = $"{datetime:ddd\\,\\ dd\\ MMM\\ yyyy\\ HH\\:mm\\:ss} GMT";
|
||||||
|
}
|
||||||
|
if(lastModifiedStr.Length>0)
|
||||||
|
response.AddHeader("Last-Modified", lastModifiedStr);
|
||||||
image.Save(compressor, image.Metadata.DecodedImageFormat ?? PngFormat.Instance);
|
image.Save(compressor, image.Metadata.DecodedImageFormat ?? PngFormat.Instance);
|
||||||
image.Dispose();
|
image.Dispose();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
response.ContentType = "application/json";
|
response.ContentType = "application/json";
|
||||||
response.AddHeader("Cache-Control", "no-store");
|
response.AddHeader("Cache-Control", "private, no-store");
|
||||||
if(content is not null)
|
if(content is not null)
|
||||||
new MemoryStream(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(content))).CopyTo(compressor);
|
new MemoryStream(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(content))).CopyTo(compressor);
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user