提交 92e895ba 编写于 作者: K kuiyu

LocalStorage Access

上级 15abc216
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> localStorageOptions)
ILocalStorageAccess localStorageAccessService;
public FileProviderMiddleware(RequestDelegate _next,IOptionsSnapshot<LocalStorageOptions> 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<string> 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);
......
/*
* 项目:.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> 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("文件不存在");
}
}
}
}
......@@ -24,7 +24,7 @@ namespace RsCode.Storage
services.Configure<LocalStorageOptions>(configuration.GetSection("LocalStorage"));
services.AddScoped<IStorageProvider, LocalStorageService>();
services.AddSingleton<ILocalStorageAccess,LocalStorageAccess>();
services.Configure<FormOptions>(x =>
......
......@@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Version>1.3.7</Version>
<Version>1.3.8</Version>
<Company>河南软商网络科技有限公司</Company>
<Description>本地服务器存储服务</Description>
<Authors>Tony</Authors>
......@@ -12,7 +12,7 @@
<RepositoryUrl>https://github.com/kuiyu/RsCode.git</RepositoryUrl>
<PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
<PackageProjectUrl>https://github.com/kuiyu/RsCode.git</PackageProjectUrl>
<AssemblyVersion>1.3.6.0</AssemblyVersion>
<AssemblyVersion>1.3.8.0</AssemblyVersion>
</PropertyGroup>
<ItemGroup>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册