ASP.NET Core 2.0 로 컬 파일 작업 문제 및 해결 방안
어떻게 ASP.NET Core 2.0 에서 로 컬 디 렉 터 리 와 파일 정 보 를 제한 적 으로 방문 합 니까?
답안
새 빈 항목 을 만 들 고 Startup 클래스 를 수정 하 며 로 컬 파일 에 접근 하 는 데 필요 한 서 비 스 를 추가 합 니 다.
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IFileProvider>(
new PhysicalFileProvider(Directory.GetCurrentDirectory()));
}
중간 부품 을 만 들 고 루트 디 렉 터 리 에 있 는 모든 파일 을 읽 으 며 출력 파일 이름:
public class HelloFileProviderMiddleware
{
private readonly RequestDelegate _next;
private readonly IFileProvider _fileProvider;
public HelloFileProviderMiddleware(RequestDelegate next, IFileProvider fileProvider)
{
_next = next;
_fileProvider = fileProvider;
}
public async Task Invoke(HttpContext context)
{
var output = new StringBuilder("");
IDirectoryContents dir = _fileProvider.GetDirectoryContents("");
foreach (IFileInfo item in dir)
{
output.AppendLine(item.Name);
}
await context.Response.WriteAsync(output.ToString());
}
}
public static class UseHelloFileProviderExtensions
{
public static IApplicationBuilder UseHelloFileProvider(this IApplicationBuilder app)
{
return app.UseMiddleware<HelloFileProviderMiddleware>();
}
}
실행,이때 페이지 효과:물론 IFileProvider 인 터 페 이 스 를 통 해 단일 파일 정 보 를 읽 을 수 있 습 니 다.
public class HelloFileProviderMiddleware
{
private readonly RequestDelegate _next;
private readonly IFileProvider _fileProvider;
public HelloFileProviderMiddleware(RequestDelegate next, IFileProvider fileProvider)
{
_next = next;
_fileProvider = fileProvider;
}
public async Task Invoke(HttpContext context)
{
IFileInfo file = _fileProvider.GetFileInfo("Startup.cs");
using (var stream = file.CreateReadStream())
{
using (var reader = new StreamReader(stream))
{
var output = await reader.ReadToEndAsync();
await context.Response.WriteAsync(output.ToString());
}
}
}
}
실행,이때 페이지 효과:토론 하 다.
ASP.NET Core 2.0 은 인터페이스 IFileProvider 를 계승 하 는 PhysicalFileProvider 형식 을 제공 합 니 다.로 컬 파일 시스템 에 제한 적 으로 접근 할 수 있 습 니 다.System.IO.File 에 대한 패키지 입 니 다.
저 희 는 Startup 의 Configure()방법 에서 IFileProvider 를 하나의 서비스 로 설정 한 다음 에 구조 함수 주입 을 통 해 미들웨어 나 컨트롤 러 에 추가 할 수 있 습 니 다.이렇게 하면 한 곳 에서 파일 의 접근 경 로 를 제어 할 수 있다.(즉,프로그램 이 시 작 될 때)
IFileProvider 는 두 가지 중요 한 방법 이 있 습 니 다.
1.GetDirectory Contents:IDirectory Contents 인 터 페 이 스 를 되 돌려 줍 니 다.디 렉 터 리 의 모든 파일 이나 디 렉 터 리 를 옮 겨 다 니 는 데 사용 할 수 있 습 니 다.
2.GetFileInfo:IFileInfo 인 터 페 이 스 를 되 돌려 줍 니 다.Create ReadSteam 방법 을 통 해 파일 내용 을 읽 을 수 있 습 니 다.
====start by sanshi=========================
다음은 루트 디 렉 터 리 의 모든 파일 과 디 렉 터 리 를 재 귀적 으로 옮 겨 다 니 며 미들웨어 코드 를 수정 합 니 다.
public class HelloFileProviderMiddleware
{
private readonly RequestDelegate _next;
private readonly IFileProvider _fileProvider;
public HelloFileProviderMiddleware(RequestDelegate next, IFileProvider fileProvider)
{
_next = next;
_fileProvider = fileProvider;
}
public async Task Invoke(HttpContext context)
{
var output = new StringBuilder("");
ResolveDirectory(output, "", "");
await context.Response.WriteAsync(output.ToString());
}
private void ResolveDirectory(StringBuilder output, string path, string prefix)
{
IDirectoryContents dir = _fileProvider.GetDirectoryContents(path);
foreach (IFileInfo item in dir)
{
if (item.IsDirectory)
{
output.AppendLine(prefix + "[" + item.Name + "]");
ResolveDirectory(output,
item.PhysicalPath.Substring(Directory.GetCurrentDirectory().Length),
prefix + " ");
} else
{
output.AppendLine(prefix + item.Name);
}
}
}
}
실행,이때 페이지 효과:====end by sanshi=========================
소스 코드 다운로드
총결산
위 에서 말 한 것 은 편집장 이 여러분 에 게 소개 한 ASP.NET Core 2.0 로 컬 파일 작업 문제 와 해결 방안 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
작업 중 문제 해결 - (win 2003 asp. net) Session 과 페이지 전송 방법 으로 해결 방안 을 정상적으로 사용 할 수 없습니다.또한 F 는 처음에 우리 의 BP & IT 프로젝트 팀 이 Forms 폼 검증 을 사용 했다 고 판단 할 수 있 습 니 다. 페이지 를 뛰 어 넘 는 것 은http://hr.bingjun.cc/MyTask/MyTas...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.