💄 Optimized file analyze
This commit is contained in:
parent
da58e10d88
commit
cebd1bd65a
@ -1,13 +1,12 @@
|
|||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using FFMpegCore;
|
using FFMpegCore;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
|
using AngleSharp.Text;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.Extensions.Caching.Memory;
|
|
||||||
using Minio;
|
using Minio;
|
||||||
using Minio.DataModel.Args;
|
using Minio.DataModel.Args;
|
||||||
using NetVips;
|
using NetVips;
|
||||||
using NodaTime;
|
using NodaTime;
|
||||||
using Quartz;
|
|
||||||
using tusdotnet.Stores;
|
using tusdotnet.Stores;
|
||||||
|
|
||||||
namespace DysonNetwork.Sphere.Storage;
|
namespace DysonNetwork.Sphere.Storage;
|
||||||
@ -54,7 +53,7 @@ public class FileService(
|
|||||||
private static readonly string TempFilePrefix = "dyn-cloudfile";
|
private static readonly string TempFilePrefix = "dyn-cloudfile";
|
||||||
|
|
||||||
private static readonly string[] AnimatedImageTypes =
|
private static readonly string[] AnimatedImageTypes =
|
||||||
new[] { "image/gif", "image/apng", "image/webp", "image/avif" };
|
["image/gif", "image/apng", "image/webp", "image/avif"];
|
||||||
|
|
||||||
// The analysis file method no longer will remove the GPS EXIF data
|
// The analysis file method no longer will remove the GPS EXIF data
|
||||||
// It should be handled on the client side, and for some specific cases it should be keep
|
// It should be handled on the client side, and for some specific cases it should be keep
|
||||||
@ -115,6 +114,14 @@ public class FileService(
|
|||||||
|
|
||||||
// Try to get orientation from exif data
|
// Try to get orientation from exif data
|
||||||
var orientation = 1;
|
var orientation = 1;
|
||||||
|
var meta = new Dictionary<string, object>
|
||||||
|
{
|
||||||
|
["blur"] = blurhash,
|
||||||
|
["format"] = format,
|
||||||
|
["width"] = width,
|
||||||
|
["height"] = height,
|
||||||
|
["orientation"] = orientation,
|
||||||
|
};
|
||||||
Dictionary<string, object> exif = [];
|
Dictionary<string, object> exif = [];
|
||||||
|
|
||||||
foreach (var field in vipsImage.GetFields())
|
foreach (var field in vipsImage.GetFields())
|
||||||
@ -122,10 +129,12 @@ public class FileService(
|
|||||||
var value = vipsImage.Get(field);
|
var value = vipsImage.Get(field);
|
||||||
|
|
||||||
// Skip GPS-related EXIF fields to remove location data
|
// Skip GPS-related EXIF fields to remove location data
|
||||||
if (IsGpsExifField(field))
|
if (IsIgnoredField(field))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
exif.Add(field, value);
|
if (field.StartsWith("exif-")) exif.Add(field.Replace("exif-", ""), value);
|
||||||
|
else meta.Add(field, value);
|
||||||
|
|
||||||
if (field == "orientation") orientation = (int)value;
|
if (field == "orientation") orientation = (int)value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,16 +143,9 @@ public class FileService(
|
|||||||
|
|
||||||
var aspectRatio = height != 0 ? (double)width / height : 0;
|
var aspectRatio = height != 0 ? (double)width / height : 0;
|
||||||
|
|
||||||
file.FileMeta = new Dictionary<string, object>
|
meta["exif"] = exif;
|
||||||
{
|
meta["ratio"] = aspectRatio;
|
||||||
["blur"] = blurhash,
|
file.FileMeta = meta;
|
||||||
["format"] = format,
|
|
||||||
["width"] = width,
|
|
||||||
["height"] = height,
|
|
||||||
["orientation"] = orientation,
|
|
||||||
["ratio"] = aspectRatio,
|
|
||||||
["exif"] = exif
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -188,7 +190,7 @@ public class FileService(
|
|||||||
{
|
{
|
||||||
// Skip compression for animated image types
|
// Skip compression for animated image types
|
||||||
var animatedMimeTypes = AnimatedImageTypes;
|
var animatedMimeTypes = AnimatedImageTypes;
|
||||||
if (animatedMimeTypes.Contains(contentType))
|
if (Enumerable.Contains(animatedMimeTypes, contentType))
|
||||||
{
|
{
|
||||||
logger.LogInformation(
|
logger.LogInformation(
|
||||||
"File {fileId} is an animated image (MIME: {mime}), skipping WebP conversion.", fileId,
|
"File {fileId} is an animated image (MIME: {mime}), skipping WebP conversion.", fileId,
|
||||||
@ -541,4 +543,11 @@ public class FileService(
|
|||||||
fieldName.Equals(gpsField, StringComparison.OrdinalIgnoreCase) ||
|
fieldName.Equals(gpsField, StringComparison.OrdinalIgnoreCase) ||
|
||||||
fieldName.StartsWith("gps", StringComparison.OrdinalIgnoreCase));
|
fieldName.StartsWith("gps", StringComparison.OrdinalIgnoreCase));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static bool IsIgnoredField(string fieldName)
|
||||||
|
{
|
||||||
|
if (IsGpsExifField(fieldName)) return true;
|
||||||
|
if (fieldName.EndsWith("-data")) return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user