From 9ead1fb9e3f73b0d287d478bdb69b1d607b8c96c Mon Sep 17 00:00:00 2001 From: "aden.chen" Date: Thu, 7 May 2026 15:49:54 +0800 Subject: [PATCH] Handle URLs in GetFileContentType and add null check Improved GetFileContentType to extract the path from URLs before resolving content type, ensuring correct handling of query strings. Added a check to return an empty string if fileName is null or empty. --- .../Files/Utilities/FileUtility.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/Infrastructure/BotSharp.Abstraction/Files/Utilities/FileUtility.cs b/src/Infrastructure/BotSharp.Abstraction/Files/Utilities/FileUtility.cs index 9dc67fd54..74811d611 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Files/Utilities/FileUtility.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Files/Utilities/FileUtility.cs @@ -65,6 +65,19 @@ public static BinaryData BuildBinaryDataFromFile(IFormFile file) public static string GetFileContentType(string fileName) { + if (string.IsNullOrEmpty(fileName)) + { + return string.Empty; + } + + // For URLs (e.g. signed S3/CloudFront URLs with query strings), extract the path portion + // so that FileExtensionContentTypeProvider can correctly resolve the extension. + if (Uri.TryCreate(fileName, UriKind.Absolute, out var uri) + && (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps)) + { + fileName = uri.AbsolutePath; + } + string contentType; var provider = new FileExtensionContentTypeProvider(); if (!provider.TryGetContentType(fileName, out contentType))