Просмотр исходного кода

1.优化流处理;
2.多线程下载增加文件合并完成事件

懒得勤快 4 лет назад
Родитель
Сommit
b7d6896bca

+ 2 - 0
Masuit.Tools.Abstractions/Extensions/BaseType/StreamExtensions.cs

@@ -47,8 +47,10 @@ namespace Masuit.Tools
         /// <returns></returns>
         public static async Task<byte[]> ToArrayAsync(this Stream stream, CancellationToken cancellationToken = default)
         {
+            stream.Position = 0;
             byte[] bytes = new byte[stream.Length];
             await stream.ReadAsync(bytes, cancellationToken);
+            stream.Seek(0, SeekOrigin.Begin);
             return bytes;
         }
 #endif

+ 3 - 3
Masuit.Tools.Abstractions/Masuit.Tools.Abstractions.csproj

@@ -7,7 +7,7 @@
     <LangVersion>9.0</LangVersion>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <CodeAnalysisRuleSet />
-    <Version>2.4.3.2</Version>
+    <Version>2.4.3.3</Version>
     <Authors>懒得勤快</Authors>
     <Description>Masuit.Tools基础公共库</Description>
     <Copyright>懒得勤快,长空X</Copyright>
@@ -20,9 +20,9 @@
     <RepositoryType>Github</RepositoryType>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
     <PackageRequireLicenseAcceptance>False</PackageRequireLicenseAcceptance>
-    <FileVersion>2.4.3.2</FileVersion>
+    <FileVersion>2.4.3.3</FileVersion>
     <Company>ldqk.org</Company>
-    <AssemblyVersion>2.4.3.2</AssemblyVersion>
+    <AssemblyVersion>2.4.3.3</AssemblyVersion>
     <PackageLicenseUrl>https://github.com/ldqk/Masuit.Tools/blob/master/LICENSE</PackageLicenseUrl>
     <EmbedUntrackedSources>true</EmbedUntrackedSources>
     <IncludeSymbols>true</IncludeSymbols>

+ 2 - 2
Masuit.Tools.Abstractions/Mime/MimeMapper.cs

@@ -19,12 +19,12 @@ namespace Masuit.Tools.AspNetCore.Mime
         private readonly Regex _pathExtensionPattern = new Regex("\\.(\\w*)$");
 
         /// <summary>
-        /// Mime类型与扩展名的映射字典(Content types)
+        /// Mime类型与扩展名的映射字典(扩展名:mimetype)
         /// </summary>
         public static Dictionary<string, string> MimeTypes { get; } = new Dictionary<string, string>();
 
         /// <summary>
-        /// mime类型与扩展名的映射关系
+        /// mime类型与扩展名的映射关系(mimetype:扩展名)
         /// </summary>
         public static Dictionary<string, string> ExtTypes { get; } = new Dictionary<string, string>();
 

+ 10 - 0
Masuit.Tools.Abstractions/Net/MultiThreadDownloader.cs

@@ -112,6 +112,11 @@ namespace Masuit.Tools.Net
         /// </summary>
         public event EventHandler TotalProgressChanged;
 
+        /// <summary>
+        /// 文件合并完成事件
+        /// </summary>
+        public event EventHandler FileMergedComplete;
+
         /// <summary>
         /// 文件合并事件
         /// </summary>
@@ -281,6 +286,11 @@ namespace Masuit.Tools.Net
                     // ignored
                 }
             }
+
+            if (FileMergedComplete != null)
+            {
+                _aop.Post(state => FileMergedComplete(state, EventArgs.Empty), this);
+            }
         }
 
         PartialDownloader CreateNew(int order, int parts, long contentLength)

+ 19 - 7
Masuit.Tools.Abstractions/Security/Encrypt.cs

@@ -588,14 +588,25 @@ namespace Masuit.Tools.Security
         /// <returns>MD5字符串</returns>
         public static string MDFile(this string fileName)
         {
-            using var fs = File.Open(fileName, FileMode.Open, FileAccess.Read);
-            var array = new byte[fs.Length];
-            fs.Read(array, 0, (int)fs.Length);
+            using var fs = new BufferedStream(File.Open(fileName, FileMode.Open, FileAccess.Read), 1048576);
             using MD5 md5 = MD5.Create();
-            byte[] bytes = md5.ComputeHash(array);
+            byte[] bytes = md5.ComputeHash(fs);
             return bytes.Aggregate("", (current, b) => current + b.ToString("x2"));
         }
 
+        /// <summary>
+        /// 计算文件的sha256
+        /// </summary>
+        /// <param name="stream"></param>
+        /// <returns></returns>
+        public static string SHA256(this Stream stream)
+        {
+            using var fs = new BufferedStream(stream, 1048576);
+            SHA256Managed sha = new SHA256Managed();
+            byte[] checksum = sha.ComputeHash(fs);
+            return BitConverter.ToString(checksum).Replace("-", string.Empty);
+        }
+
         /// <summary>
         /// 获取数据流的MD5值
         /// </summary>
@@ -603,9 +614,10 @@ namespace Masuit.Tools.Security
         /// <returns>MD5字符串</returns>
         public static string MDString(this Stream stream)
         {
-            var bytes = stream.ToArray();
-            using var md5 = MD5.Create();
-            var mdstr = md5.ComputeHash(bytes).Aggregate("", (current, b) => current + b.ToString("x2"));
+            using var fs = new BufferedStream(stream, 1048576);
+            using MD5 md5 = MD5.Create();
+            byte[] bytes = md5.ComputeHash(fs);
+            var mdstr = bytes.Aggregate("", (current, b) => current + b.ToString("x2"));
             stream.Position = 0;
             return mdstr;
         }

+ 3 - 3
Masuit.Tools.Core/Masuit.Tools.Core.csproj

@@ -20,10 +20,10 @@
         <UserSecretsId>830c282f-f7c1-42be-8651-4cd06ac8e73f</UserSecretsId>
         <RepositoryType>Github</RepositoryType>
         <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-        <Version>2.4.3.2</Version>
-        <FileVersion>2.4.3.2</FileVersion>
+        <Version>2.4.3.3</Version>
+        <FileVersion>2.4.3.3</FileVersion>
         <Company>ldqk.org</Company>
-        <AssemblyVersion>2.4.3.2</AssemblyVersion>
+        <AssemblyVersion>2.4.3.3</AssemblyVersion>
         <Authors>懒得勤快X</Authors>
         <RepositoryUrl>https://github.com/ldqk/Masuit.Tools</RepositoryUrl>
         <EmbedUntrackedSources>true</EmbedUntrackedSources>

BIN
Masuit.Tools/Properties/AssemblyInfo.cs


+ 1 - 1
Masuit.Tools/package.nuspec

@@ -4,7 +4,7 @@
     <!--*-->
     <id>Masuit.Tools.Net</id>
     <!--*-->
-    <version>2.4.3.2</version>
+    <version>2.4.3.3</version>
     <title>Masuit.Tools</title>
     <!--*-->
     <authors>masuit.com</authors>

+ 1 - 1
Test/Masuit.Tools.AspNetCore.ResumeFileResults.WebTest/Masuit.Tools.AspNetCore.ResumeFileResults.WebTest.csproj

@@ -23,7 +23,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.1.1" />
+    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.1.2" />
   </ItemGroup>
 
   <ItemGroup>