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 { private readonly RequestDelegate _next; private readonly IWebHostEnvironment _hostingEnv; private readonly StaticFileOptions _options; private readonly ILoggerFactory _loggerFactory; 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; } } }