From b5fc28bc183d6bf25ae2409d292447831a7f1fd5 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 7 Apr 2023 14:36:26 +0800 Subject: [PATCH] x --- .../MultiDiskStaticFilesMiddleware.cs | 115 ++++++++++++------ 1 file changed, 76 insertions(+), 39 deletions(-) diff --git a/IRaCIS.Core.API/_PipelineExtensions/IRacisHostFile/MultiDiskStaticFilesMiddleware.cs b/IRaCIS.Core.API/_PipelineExtensions/IRacisHostFile/MultiDiskStaticFilesMiddleware.cs index 91b7b32af..25780b5c2 100644 --- a/IRaCIS.Core.API/_PipelineExtensions/IRacisHostFile/MultiDiskStaticFilesMiddleware.cs +++ b/IRaCIS.Core.API/_PipelineExtensions/IRacisHostFile/MultiDiskStaticFilesMiddleware.cs @@ -1,54 +1,91 @@ -using Microsoft.AspNetCore.Builder; +using IRaCIS.Core.Domain.Share; +using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.StaticFiles; +using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.FileProviders.Physical; +using Microsoft.Extensions.Hosting.Internal; +using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; +using Microsoft.VisualBasic; using System.IO; +using System.Linq; +using System.Threading.Tasks; namespace IRaCIS.Core.API { - - //public class MultiDiskStaticFilesMiddleware - //{ - // public MultiDiskStaticFilesMiddleware(RequestDelegate next,IWebHostEnvironment webHostEnvironment, StaticFileOptions options) - // : base(next, webHostEnvironment, options) - // { - // } - // public override async Task InvokeAsync(HttpContext context) - // { - // try - // { - // await base.InvokeAsync(context); - // } - // catch (FileNotFoundException) - // { - // var disks = GetDisks(); + public class MultiDiskStaticFilesMiddleware + { + private readonly RequestDelegate _next; + private readonly IWebHostEnvironment _hostingEnv; + private readonly StaticFileOptions _options; + private readonly ILoggerFactory _loggerFactory; - // foreach (var disk in disks) - // { - // var fileInfo = new PhysicalFileInfo(new FileInfo(Path.Combine(disk, Options.RequestPath.Value))); - // if (fileInfo.Exists) - // { - // await SendFileAsync(context, fileInfo); - // return; - // } - // } + public MultiDiskStaticFilesMiddleware(RequestDelegate next, IWebHostEnvironment hostingEnv, StaticFileOptions options, ILoggerFactory loggerFactory) + { + _next = next; + _hostingEnv = hostingEnv; + _options = options; + _loggerFactory = loggerFactory; + } + + public async Task Invoke(HttpContext context) + { + var path = context.Request.Path.Value; + var isIRacisFile = path.StartsWith($"/{StaticData.Folder.IRaCISDataFolder}"); + + var isDicomFile = path.Contains($"{StaticData.Folder.DicomFolder}"); + + var isFind = false; + if (isIRacisFile) + { + + } + if (isDicomFile) + { + + } + + + + // 如果所有磁盘都不存在所请求的文件,则将请求传递给下一个中间件组件。 + await _next.Invoke(context); + } + + private async Task ServeFileAsync(HttpContext context, IFileInfo fileInfo) + { + var response = context.Response; + response.ContentType = GetContentType(fileInfo.PhysicalPath); + + using (var fileStream = fileInfo.CreateReadStream()) + { + await fileStream.CopyToAsync(response.Body); + } + } + + private string[] GetDisks() + { + // 获取系统中所有可用的磁盘 + return DriveInfo.GetDrives() + .Where(d => d.IsReady && d.DriveType == DriveType.Fixed) + .Select(d => d.RootDirectory.FullName) + .ToArray(); + } + + private static string GetContentType(string path) + { + var provider = new FileExtensionContentTypeProvider(); + if (!provider.TryGetContentType(path, out var contentType)) + { + contentType = "application/octet-stream"; + } + + return contentType; + } + } - // await Next.Invoke(context); - // } - // } - // private string[] GetDisks() - // { - // // 获取系统中所有可用的磁盘 - // return DriveInfo.GetDrives() - // .Where(d => d.IsReady && d.DriveType == DriveType.Fixed) - // .Select(d => d.RootDirectory.FullName) - // .ToArray(); - // } - //} - }