1
0
懒得勤快 5 жил өмнө
parent
commit
671585aa19

+ 28 - 0
src/Masuit.MyBlogs.Core/Common/CommonHelper.cs

@@ -9,11 +9,13 @@ using Microsoft.Net.Http.Headers;
 using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
+using System.Drawing;
 using System.IO;
 using System.Linq;
 using System.Net;
 using System.Text;
 using System.Threading;
+using Masuit.Tools.Media;
 #if !DEBUG
 using Masuit.MyBlogs.Core.Models.ViewModel;
 using Masuit.Tools.Models;
@@ -292,5 +294,31 @@ namespace Masuit.MyBlogs.Core.Common
         {
             return path.Split('&').Where(s => s.Split('=', StringSplitOptions.RemoveEmptyEntries).Length == 2).Join("&");
         }
+
+        /// <summary>
+        /// 添加水印
+        /// </summary>
+        /// <param name="stream"></param>
+        /// <returns></returns>
+        public static Stream AddWatermark(this Stream stream)
+        {
+            if (!string.IsNullOrEmpty(SystemSettings.GetOrAdd("Watermark", string.Empty)))
+            {
+                try
+                {
+                    var watermarker = new ImageWatermarker(stream)
+                    {
+                        SkipWatermarkForSmallImages = true,
+                        SmallImagePixelsThreshold = 40000
+                    };
+                    return watermarker.AddWatermark(SystemSettings["Watermark"], Color.LightGray, WatermarkPosition.BottomRight, 30);
+                }
+                catch
+                {
+                    //
+                }
+            }
+            return stream;
+        }
     }
 }

+ 0 - 19
src/Masuit.MyBlogs.Core/Common/ImagebedClient.cs

@@ -4,12 +4,10 @@ using Masuit.MyBlogs.Core.Configs;
 using Masuit.Tools;
 using Masuit.Tools.Html;
 using Masuit.Tools.Logging;
-using Masuit.Tools.Media;
 using Masuit.Tools.Systems;
 using Microsoft.Extensions.Configuration;
 using System;
 using System.Collections.Generic;
-using System.Drawing;
 using System.IO;
 using System.Linq;
 using System.Net;
@@ -52,23 +50,6 @@ namespace Masuit.MyBlogs.Core.Common
         public async Task<(string url, bool success)> UploadImage(Stream stream, string file)
         {
             file = SnowFlake.NewId + Path.GetExtension(file);
-            if (!string.IsNullOrEmpty(CommonHelper.SystemSettings.GetOrAdd("Watermark", string.Empty)))
-            {
-                try
-                {
-                    var watermarker = new ImageWatermarker(stream)
-                    {
-                        SkipWatermarkForSmallImages = true,
-                        SmallImagePixelsThreshold = 40000
-                    };
-                    stream = watermarker.AddWatermark(CommonHelper.SystemSettings["Watermark"], Color.LightGray, WatermarkPosition.BottomRight, 30);
-                }
-                catch
-                {
-                    // ignore
-                }
-            }
-
             for (var i = 0; i < 3; i++)
             {
                 try

+ 8 - 5
src/Masuit.MyBlogs.Core/Extensions/UEditor/CrawlerHandler.cs

@@ -8,6 +8,7 @@ using System.IO;
 using System.Linq;
 using System.Net;
 using System.Net.Http;
+using System.Threading.Tasks;
 
 namespace Masuit.MyBlogs.Core.Extensions.UEditor
 {
@@ -28,7 +29,7 @@ namespace Masuit.MyBlogs.Core.Extensions.UEditor
                 return WriteJson(new
                 {
                     state = "SUCCESS",
-                    list = sources.AsParallel().Select(s => new Crawler(s).Fetch()).Select(x => new
+                    list = sources.AsParallel().Select(s => new Crawler(s).Fetch().Result).Select(x => new
                     {
                         state = x.State,
                         source = x.SourceUrl,
@@ -59,7 +60,7 @@ namespace Masuit.MyBlogs.Core.Extensions.UEditor
             SourceUrl = sourceUrl;
         }
 
-        public Crawler Fetch()
+        public async Task<Crawler> Fetch()
         {
             if (!SourceUrl.IsExternalAddress())
             {
@@ -68,7 +69,7 @@ namespace Masuit.MyBlogs.Core.Extensions.UEditor
             }
             try
             {
-                var response = _httpClient.GetAsync(SourceUrl).Result;
+                using var response = _httpClient.GetAsync(SourceUrl).Result;
                 if (response.StatusCode != HttpStatusCode.OK)
                 {
                     State = "Url returns " + response.StatusCode;
@@ -76,8 +77,9 @@ namespace Masuit.MyBlogs.Core.Extensions.UEditor
                 }
 
                 ServerUrl = PathFormatter.Format(Path.GetFileName(SourceUrl), UeditorConfig.GetString("catcherPathFormat"));
-                using var stream = response.Content.ReadAsStreamAsync().Result;
+                var stream = response.Content.ReadAsStreamAsync().Result;
                 var savePath = AppContext.BaseDirectory + "wwwroot" + ServerUrl;
+                stream = stream.AddWatermark();
                 var (url, success) = Startup.ServiceProvider.GetRequiredService<ImagebedClient>().UploadImage(stream, savePath).Result;
                 if (success)
                 {
@@ -94,7 +96,8 @@ namespace Masuit.MyBlogs.Core.Extensions.UEditor
                     stream.CopyTo(ms);
                     File.WriteAllBytes(savePath, ms.GetBuffer());
                 }
-
+                stream.Close();
+                await stream.DisposeAsync();
                 State = "SUCCESS";
             }
             catch (Exception e)

+ 3 - 0
src/Masuit.MyBlogs.Core/Extensions/UEditor/UploadHandler.cs

@@ -50,6 +50,7 @@ namespace Masuit.MyBlogs.Core.Extensions.UEditor
                 if (UploadConfig.AllowExtensions.Contains(Path.GetExtension(uploadFileName).ToLower()))
                 {
                     var stream = file.OpenReadStream();
+                    stream = stream.AddWatermark();
                     var (url, success) = Startup.ServiceProvider.GetRequiredService<ImagebedClient>().UploadImage(stream, localPath).Result;
                     if (success)
                     {
@@ -65,6 +66,8 @@ namespace Masuit.MyBlogs.Core.Extensions.UEditor
                         Result.Url = savePath;
                     }
                     Result.State = UploadState.Success;
+                    stream.Close();
+                    stream.Dispose();
                 }
                 else
                 {

+ 0 - 1
src/Masuit.MyBlogs.Core/Views/Dashboard/Index.cshtml

@@ -42,7 +42,6 @@
     <script src="https://cdn.staticfile.org/jquery/3.4.1/jquery.min.js"></script>
     <script src="https://img.highcharts.com.cn/highstock/highstock.js"></script>
     <script src="https://cdn.staticfile.org/echarts/4.1.0-release/echarts.min.js"></script>
-    <script src="~/Assets/echarts/china.js"></script>
     <script src="https://img.highcharts.com.cn/highcharts/highcharts-more.js"></script>
     <script src="https://img.highcharts.com.cn/highcharts/modules/solid-gauge.js"></script>
     <script src="https://img.hcharts.cn/highcharts-plugins/highcharts-zh_CN.js"></script>

+ 3 - 3
src/Masuit.MyBlogs.Core/Views/Post/Details.cshtml

@@ -19,9 +19,9 @@
     <link href="~/Assets/UEditor/third-party/SyntaxHighlighter/styles/shCore.min.css" rel="stylesheet" />
     <link href="~/Assets/share/share.css" rel="stylesheet" />
     <link href="~/Assets/highlight/css/highlight.css" rel="stylesheet" />
-    <script src="~/Assets/share/jquery.qrcode.min.js"></script>
-    <script src="~/Assets/share/jquery.share.min.js"></script>
-    <script src="~/Assets/highlight/js/highlight.js"></script>
+    <script src="~/Assets/share/jquery.qrcode.min.js" async defer></script>
+    <script src="~/Assets/share/jquery.share.min.js" async defer></script>
+    <script src="~/Assets/highlight/js/highlight.js" async defer></script>
 </environment>
 <environment names="Stage,Production">
     @await Styles.RenderAsync("/bundles/article.css")

+ 4 - 4
src/Masuit.MyBlogs.Core/Views/Post/Details_Admin.cshtml

@@ -15,15 +15,15 @@
     string cid = string.IsNullOrEmpty(Context.Request.Query["cid"]) ? "0" : Context.Request.Query["cid"].ToString();
     Advertisement ad = ViewBag.Ads;
 }
-<script src="https://cdn.staticfile.org/jqueryui/1.12.1/jquery-ui.min.js"></script>
+<script src="https://cdn.staticfile.org/jqueryui/1.12.1/jquery-ui.min.js" async defer></script>
 <environment names="Development">
     <link href="~/Assets/jquery.tocify/jquery.tocify.min.css" rel="stylesheet" />
     <link href="~/Assets/UEditor/third-party/SyntaxHighlighter/styles/shCore.min.css" rel="stylesheet" />
     <link href="~/Assets/share/share.css" rel="stylesheet" />
     <link href="~/Assets/highlight/css/highlight.css" rel="stylesheet" />
-    <script src="~/Assets/share/jquery.qrcode.min.js"></script>
-    <script src="~/Assets/share/jquery.share.min.js"></script>
-    <script src="~/Assets/highlight/js/highlight.js"></script>
+    <script src="~/Assets/share/jquery.qrcode.min.js" async defer></script>
+    <script src="~/Assets/share/jquery.share.min.js" async defer></script>
+    <script src="~/Assets/highlight/js/highlight.js" async defer></script>
 </environment>
 <environment names="Stage,Production">
     @await Styles.RenderAsync("/bundles/article.css")

+ 15 - 15
src/Masuit.MyBlogs.Core/Views/Shared/_Layout.cshtml

@@ -47,32 +47,32 @@
     <environment names="Stage,Production">
         @await Styles.RenderAsync("~/bundles/main.css")
     </environment>
-    <script src="https://cdn.staticfile.org/bluebird/3.5.3/bluebird.min.js"></script>
+    <script src="https://cdn.staticfile.org/bluebird/3.5.3/bluebird.min.js" async defer></script>
+    <script src="https://cdn.staticfile.org/modernizr/2010.07.06dev/modernizr.min.js" async defer></script>
     <script src="https://cdn.staticfile.org/jquery/3.4.1/jquery.min.js"></script>
-    <script src="https://cdn.staticfile.org/modernizr/2010.07.06dev/modernizr.min.js"></script>
-    <script src="https://cdn.staticfile.org/limonte-sweetalert2/6.6.9/sweetalert2.min.js"></script>
+    <script src="https://cdn.staticfile.org/limonte-sweetalert2/6.6.9/sweetalert2.min.js" async defer></script>
     <script src="https://cdn.staticfile.org/platform/1.3.5/platform.min.js"></script>
-    <script src="https://cdn.staticfile.org/notie/4.3.1/notie.min.js"></script>
-    <script src="https://cdn.staticfile.org/jquery.form/4.2.2/jquery.form.min.js"></script>
+    <script src="https://cdn.staticfile.org/notie/4.3.1/notie.min.js" async defer></script>
+    <script src="https://cdn.staticfile.org/jquery.form/4.2.2/jquery.form.min.js" async defer></script>
     <script src="https://cdn.staticfile.org/jquery-mobile/1.4.5/jquery.mobile.min.js"></script>
-    <script src="https://cdn.staticfile.org/linq.js/2.2.0.2/linq.min.js"></script>
-    <script src="https://cdn.staticfile.org/wow/1.1.2/wow.min.js"></script>
-    <script src="https://cdn.staticfile.org/ifvisible/1.0.6/ifvisible.min.js"></script>
-    <script src="https://cdn.staticfile.org/jquery_lazyload/1.9.7/jquery.lazyload.min.js"></script>
+    <script src="https://cdn.staticfile.org/linq.js/2.2.0.2/linq.min.js" async defer></script>
+    <script src="https://cdn.staticfile.org/wow/1.1.2/wow.min.js" async defer></script>
+    <script src="https://cdn.staticfile.org/ifvisible/1.0.6/ifvisible.min.js" async defer></script>
+    <script src="https://cdn.staticfile.org/jquery_lazyload/1.9.7/jquery.lazyload.min.js" async defer></script>
     <script src="~/Scripts/layer/layer.js"></script>
     <script src="~/Assets/layui/layui.min.js"></script>
     <environment names="Development">
         <script src="~/Scripts/bootstrap.min.js"></script>
         <script src="~/Scripts/bootstrap-suggest.min.js"></script>
-        <script src="~/Scripts/jquery.query.js"></script>
-        <script src="~/Scripts/jquery.paging.js"></script>
-        <script src="~/Scripts/ripplet.js"></script>
+        <script src="~/Scripts/jquery.query.js" async defer></script>
+        <script src="~/Scripts/jquery.paging.js" async defer></script>
+        <script src="~/Scripts/ripplet.js" async defer></script>
         <script src="~/Scripts/global/scripts.js"></script>
         <script src="~/Assets/tippy/tippy.js"></script>
         <script src="~/Assets/newsbox/jquery.bootstrap.newsbox.js"></script>
-        <script src="~/Assets/tagcloud/js/tagcloud.js"></script>
-        <script src="~/Assets/scrolltop/js/scrolltop.js"></script>
-        <script src="~/Assets/nav/js/main.js"></script>
+        <script src="~/Assets/tagcloud/js/tagcloud.js" async defer></script>
+        <script src="~/Assets/scrolltop/js/scrolltop.js" async defer></script>
+        <script src="~/Assets/nav/js/main.js" async defer></script>
     </environment>
     <environment names="Stage,Production">
         @await Scripts.RenderAsync("~/bundles/main.js")