Переглянути джерело

html转 word时, 图片请求3秒就超时放弃, 避免前端页面超时

qinchaoyue 5 місяців тому
батько
коміт
c6b33c7ea2
1 змінених файлів з 25 додано та 2 видалено
  1. 25 2
      src/Hotline.Share/Tools/HtmlImageValidator.cs

+ 25 - 2
src/Hotline.Share/Tools/HtmlImageValidator.cs

@@ -6,10 +6,19 @@ using System.Text.RegularExpressions;
 using System.Threading.Tasks;
 
 namespace Hotline.Share.Tools;
+
+/// <summary>
+/// Html 转 Word 时,验证图片是否有效
+/// </summary>
 public class HtmlImageValidator
 {
     private readonly HttpClient _httpClient = new HttpClient();
 
+    /// <summary>
+    /// Html 转 Word 时,验证图片是否有效
+    /// </summary>
+    /// <param name="htmlContent"></param>
+    /// <returns></returns>
     public string ValidateAndReplaceImagesAsync(string htmlContent)
     {
         string pattern = "<img[^>]+src=\"([^\"]+)\"[^>]*>";
@@ -28,12 +37,26 @@ public class HtmlImageValidator
         return htmlContent;
     }
 
+    /// <summary>
+    /// 请求图片链接,判断是否有效
+    /// </summary>
+    /// <param name="url"></param>
+    /// <returns></returns>
     private bool IsImageAccessible(string url)
     {
         try
         {
-            var response = _httpClient.GetAsync(url).GetAwaiter().GetResult();
-            return response.IsSuccessStatusCode;
+            var task = _httpClient.GetAsync(url);
+            var completedTask = Task.WhenAny(task, Task.Delay(3000)).GetAwaiter().GetResult();
+
+            if (completedTask == task && task.Result.IsSuccessStatusCode)
+            {
+                return true;
+            }
+            else
+            {
+                return false;
+            }
         }
         catch
         {