diff --git a/src/storage-service/Deal.Storage/Options/StorageOptions.cs b/src/storage-service/Deal.Storage/Options/StorageOptions.cs
index 8fec200..621bc5a 100644
--- a/src/storage-service/Deal.Storage/Options/StorageOptions.cs
+++ b/src/storage-service/Deal.Storage/Options/StorageOptions.cs
@@ -37,6 +37,8 @@ public sealed class StorageOptions
///
public const string SecureEnvKey = "DEAL_STORAGE_SECURE";
+ private const string TrueLiteral = "true";
+
public string Endpoint { get; init; } = string.Empty;
public string AccessKey { get; init; } = string.Empty;
@@ -69,5 +71,5 @@ public sealed class StorageOptions
///
public static bool IsEnabled(string? rawValue)
=> string.Equals(rawValue, "1", StringComparison.Ordinal)
- || string.Equals(rawValue, "true", StringComparison.OrdinalIgnoreCase);
+ || string.Equals(rawValue, TrueLiteral, StringComparison.OrdinalIgnoreCase);
}
diff --git a/src/storage-service/Deal.Storage/Services/FileKindSniffer.cs b/src/storage-service/Deal.Storage/Services/FileKindSniffer.cs
index c7557ba..4b17e5c 100644
--- a/src/storage-service/Deal.Storage/Services/FileKindSniffer.cs
+++ b/src/storage-service/Deal.Storage/Services/FileKindSniffer.cs
@@ -8,7 +8,7 @@ public static class FileKindSniffer
///
/// Тип «прочее».
///
- public const string KindOther = "other";
+ public const string KindOther = FileKinds.Other;
private const string DefaultMime = "application/octet-stream";
@@ -22,95 +22,95 @@ public static class FileKindSniffer
{
if (StartsWith(head, 0x89, 0x50, 0x4E, 0x47))
{
- return ("image", "image/png");
+ return (FileKinds.Image, "image/png");
}
if (StartsWith(head, 0xFF, 0xD8, 0xFF))
{
- return ("image", "image/jpeg");
+ return (FileKinds.Image, "image/jpeg");
}
if (StartsWith(head, 0x47, 0x49, 0x46, 0x38))
{
- return ("image", "image/gif");
+ return (FileKinds.Image, "image/gif");
}
if (StartsWith(head, 0x42, 0x4D))
{
- return ("image", "image/bmp");
+ return (FileKinds.Image, "image/bmp");
}
if (StartsWith(head, 0x49, 0x49, 0x2A, 0x00) || StartsWith(head, 0x4D, 0x4D, 0x00, 0x2A))
{
- return ("image", "image/tiff");
+ return (FileKinds.Image, "image/tiff");
}
if (StartsWith(head, 0x25, 0x50, 0x44, 0x46))
{
- return ("document", "application/pdf");
+ return (FileKinds.Document, "application/pdf");
}
if (StartsWith(head, 0x50, 0x4B, 0x03, 0x04) || StartsWith(head, 0x50, 0x4B, 0x05, 0x06))
{
- return ("archive", "application/zip");
+ return (FileKinds.Archive, "application/zip");
}
if (StartsWith(head, 0x52, 0x61, 0x72, 0x21))
{
- return ("archive", "application/vnd.rar");
+ return (FileKinds.Archive, "application/vnd.rar");
}
if (StartsWith(head, 0x37, 0x7A, 0xBC, 0xAF))
{
- return ("archive", "application/x-7z-compressed");
+ return (FileKinds.Archive, "application/x-7z-compressed");
}
if (StartsWith(head, 0x1F, 0x8B))
{
- return ("archive", "application/gzip");
+ return (FileKinds.Archive, "application/gzip");
}
if (StartsWith(head, 0x1A, 0x45, 0xDF, 0xA3))
{
- return ("video", "video/webm");
+ return (FileKinds.Video, "video/webm");
}
if (head.Length >= 12 && StartsWith(head, 0x52, 0x49, 0x46, 0x46))
{
if (StartsWith(head[8..], 0x57, 0x45, 0x42, 0x50))
{
- return ("image", "image/webp");
+ return (FileKinds.Image, "image/webp");
}
if (StartsWith(head[8..], 0x57, 0x41, 0x56, 0x45))
{
- return ("audio", "audio/wav");
+ return (FileKinds.Audio, "audio/wav");
}
if (StartsWith(head[8..], 0x41, 0x56, 0x49, 0x20))
{
- return ("video", "video/x-msvideo");
+ return (FileKinds.Video, "video/x-msvideo");
}
}
if (head.Length >= 8 && StartsWith(head[4..], 0x66, 0x74, 0x79, 0x70))
{
- return ("video", "video/mp4");
+ return (FileKinds.Video, "video/mp4");
}
if (StartsWith(head, 0x49, 0x44, 0x33) || StartsWith(head, 0xFF, 0xFB))
{
- return ("audio", "audio/mpeg");
+ return (FileKinds.Audio, "audio/mpeg");
}
if (StartsWith(head, 0x4F, 0x67, 0x67, 0x53))
{
- return ("audio", "audio/ogg");
+ return (FileKinds.Audio, "audio/ogg");
}
if (StartsWith(head, 0x66, 0x4C, 0x61, 0x43))
{
- return ("audio", "audio/flac");
+ return (FileKinds.Audio, "audio/flac");
}
string declared = (contentType ?? string.Empty).Trim();
@@ -125,10 +125,10 @@ public static class FileKindSniffer
// Определяет общий тип по префиксу MIME-типа.
private static string KindFromMime(string mime)
{
- if (mime.StartsWith("image/", StringComparison.OrdinalIgnoreCase)) return "image";
- if (mime.StartsWith("video/", StringComparison.OrdinalIgnoreCase)) return "video";
- if (mime.StartsWith("audio/", StringComparison.OrdinalIgnoreCase)) return "audio";
- if (mime.StartsWith("text/", StringComparison.OrdinalIgnoreCase)) return "document";
+ if (mime.StartsWith("image/", StringComparison.OrdinalIgnoreCase)) return FileKinds.Image;
+ if (mime.StartsWith("video/", StringComparison.OrdinalIgnoreCase)) return FileKinds.Video;
+ if (mime.StartsWith("audio/", StringComparison.OrdinalIgnoreCase)) return FileKinds.Audio;
+ if (mime.StartsWith("text/", StringComparison.OrdinalIgnoreCase)) return FileKinds.Document;
return KindOther;
}
diff --git a/src/storage-service/Deal.Storage/Services/FileKinds.cs b/src/storage-service/Deal.Storage/Services/FileKinds.cs
new file mode 100644
index 0000000..c3ecd66
--- /dev/null
+++ b/src/storage-service/Deal.Storage/Services/FileKinds.cs
@@ -0,0 +1,37 @@
+namespace Deal.Storage.Services;
+
+///
+/// Коды категорий файлов, возвращаемые определителем типа.
+///
+public static class FileKinds
+{
+ ///
+ /// Категория «изображение».
+ ///
+ public const string Image = "image";
+
+ ///
+ /// Категория «видео».
+ ///
+ public const string Video = "video";
+
+ ///
+ /// Категория «аудио».
+ ///
+ public const string Audio = "audio";
+
+ ///
+ /// Категория «документ».
+ ///
+ public const string Document = "document";
+
+ ///
+ /// Категория «архив».
+ ///
+ public const string Archive = "archive";
+
+ ///
+ /// Категория «прочее».
+ ///
+ public const string Other = "other";
+}