From 92e895bad570e9d980b730175c9811f866d5dd85 Mon Sep 17 00:00:00 2001 From: kuiyu <79599287@qq.com> Date: Thu, 28 Oct 2021 16:54:12 +0800 Subject: [PATCH] LocalStorage Access --- .../FileProviderMiddleware.cs | 25 ++++++++-- .../ILocalStorageAccess.cs | 50 +++++++++++++++++++ .../LocalStorageServiceExtension.cs | 2 +- .../RsCode.Storage.LocalStorage.csproj | 4 +- 4 files changed, 73 insertions(+), 8 deletions(-) create mode 100644 src/RsCode.Storage.LocalStorage/ILocalStorageAccess.cs diff --git a/src/RsCode.Storage.LocalStorage/FileProviderMiddleware.cs b/src/RsCode.Storage.LocalStorage/FileProviderMiddleware.cs index 610c9b2..26caaa3 100644 --- a/src/RsCode.Storage.LocalStorage/FileProviderMiddleware.cs +++ b/src/RsCode.Storage.LocalStorage/FileProviderMiddleware.cs @@ -1,5 +1,16 @@ -using Microsoft.AspNetCore.Http; +/* + * 项目:.Net项目开发工具库 + * 协议:MIT License 2.0 + * 作者:河南软商网络科技有限公司 + * 项目己托管于 + * github + https://github.com/kuiyu/RsCode.git + */ + +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Options; +using RsCode.Storage.LocalStorage; +using System; using System.IO; using System.Text; using System.Threading.Tasks; @@ -14,14 +25,16 @@ namespace RsCode.Storage { readonly RequestDelegate next; LocalStorageOptions StorageOptions; - public FileProviderMiddleware(RequestDelegate _next,IOptionsSnapshot localStorageOptions) + ILocalStorageAccess localStorageAccessService; + public FileProviderMiddleware(RequestDelegate _next,IOptionsSnapshot localStorageOptions, ILocalStorageAccess _localStorageAccessService) { next = _next; StorageOptions = localStorageOptions.Value; + localStorageAccessService = _localStorageAccessService; } public async Task InvokeAsync(HttpContext context ) { - await AccessResourceAsync(context); + await localStorageAccessService.AccessFileAsync(context); } async Task ReadBodyAsync(HttpContext context) @@ -37,14 +50,16 @@ namespace RsCode.Storage return result; } - async Task AccessResourceAsync(HttpContext context) + public virtual async Task AccessResourceAsync(HttpContext context) { string requestFile = context.Request.Path; - requestFile = requestFile.Replace("/res/", ""); + var accessPath = StorageOptions.AccessPath; + requestFile = requestFile.Replace(accessPath, ""); requestFile = requestFile.Replace("//", "\\"); string physicsPath =StorageOptions.SavePath ; string file = Path.Combine($"{physicsPath}{requestFile}"); file = System.Web.HttpUtility.UrlDecode(file); + Console.WriteLine($"file={file}"); if (File.Exists(file)) { await context.Response.SendFileAsync(file); diff --git a/src/RsCode.Storage.LocalStorage/ILocalStorageAccess.cs b/src/RsCode.Storage.LocalStorage/ILocalStorageAccess.cs new file mode 100644 index 0000000..c8f140d --- /dev/null +++ b/src/RsCode.Storage.LocalStorage/ILocalStorageAccess.cs @@ -0,0 +1,50 @@ +/* + * 项目:.Net项目开发工具库 + * 协议:MIT License 2.0 + * 作者:河南软商网络科技有限公司 + * 项目己托管于 + * github + https://github.com/kuiyu/RsCode.git + */ + +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Options; +using System.IO; +using System.Threading.Tasks; + +namespace RsCode.Storage.LocalStorage +{ + public interface ILocalStorageAccess + { + Task AccessFileAsync(HttpContext context); + } + + public class LocalStorageAccess : ILocalStorageAccess + { + LocalStorageOptions StorageOptions; + + + public LocalStorageAccess(IOptionsSnapshot localStorageOptions) + { + StorageOptions = localStorageOptions.Value; + } + public virtual async Task AccessFileAsync(HttpContext context) + { + string requestFile = context.Request.Path; + var accessPath = StorageOptions.AccessPath; + requestFile = requestFile.Replace(accessPath, ""); + requestFile = requestFile.Replace("//", "\\"); + string physicsPath = StorageOptions.SavePath; + string file = Path.Combine($"{physicsPath}{requestFile}"); + file = System.Web.HttpUtility.UrlDecode(file); + if (File.Exists(file)) + { + await context.Response.SendFileAsync(file); + } + else + { + await context.Response.WriteAsync("文件不存在"); + } + } + } +} diff --git a/src/RsCode.Storage.LocalStorage/LocalStorageServiceExtension.cs b/src/RsCode.Storage.LocalStorage/LocalStorageServiceExtension.cs index f5388f9..0c38460 100644 --- a/src/RsCode.Storage.LocalStorage/LocalStorageServiceExtension.cs +++ b/src/RsCode.Storage.LocalStorage/LocalStorageServiceExtension.cs @@ -24,7 +24,7 @@ namespace RsCode.Storage services.Configure(configuration.GetSection("LocalStorage")); services.AddScoped(); - + services.AddSingleton(); services.Configure(x => diff --git a/src/RsCode.Storage.LocalStorage/RsCode.Storage.LocalStorage.csproj b/src/RsCode.Storage.LocalStorage/RsCode.Storage.LocalStorage.csproj index d741bb8..b16155f 100644 --- a/src/RsCode.Storage.LocalStorage/RsCode.Storage.LocalStorage.csproj +++ b/src/RsCode.Storage.LocalStorage/RsCode.Storage.LocalStorage.csproj @@ -2,7 +2,7 @@ netstandard2.0 - 1.3.7 + 1.3.8 河南软商网络科技有限公司 本地服务器存储服务 Tony @@ -12,7 +12,7 @@ https://github.com/kuiyu/RsCode.git LICENSE.txt https://github.com/kuiyu/RsCode.git - 1.3.6.0 + 1.3.8.0 -- GitLab