브라우저 API 파일 시스템 액세스를위한 Blazor 래퍼
API를 사용하면 파일과 디렉토리 모두 브라우저에서 로컬 파일 시스템을 읽고 쓸 수 있습니다.
면책 조항 : API는 제한된 브라우저 세트에서 지원됩니다. Firefox, Chrome for Android 및 iOS 모바일 브라우저에서는 지원되지 않습니다.
샘플 프로젝트는 https://kristofferstrube.github.io/blazor.filesystemaccess/에서 시연 할 수 있습니다.
각 페이지에서 오른쪽 상단에있는 예제의 해당 코드를 찾을 수 있습니다.
메인 페이지에서 API가 중고 브라우저에서 최소한의 지원이 있는지 확인할 수 있습니다.
상태 페이지 에서이 래퍼가 덮은 WebIdl 사양의 양을 볼 수 있습니다.
라이브러리를 사용하려면 .NET 7.0 또는 최신 설치가 필요합니다.
.NET 7을 다운로드하십시오
IDE의 패키지 관리자를 사용하여 Nuget을 통해 패키지를 설치하거나 명령 줄을 사용하여 다음과 같습니다.
dotnet add package KristofferStrube.Blazor.FileSystemAccess패키지는 Blazor WebAssembly 및 Blazor Server 프로젝트에서 사용할 수 있습니다. (대역폭 문제로 인해 Blazor 서버에서는 큰 파일 스트리밍이 지원되지 않습니다.)
또한 패키지를 페이지에서 사용하려면 패키지를 참조해야합니다. 다음을 추가하여 _Import.razor 에서 수행 할 수 있습니다.
@ using KristofferStrube . Blazor . FileSystemAccess 모든 페이지에서 서비스를 사용할 수 있도록 쉬운 방법은 IServiceCollection 에 등록하여 필요한 페이지에 종속성을 주입 할 수 있도록하는 것입니다. 이것은 호스트를 만들고 실행하기 전에 다음을 추가하여 Program.cs 에서 수행됩니다.
var builder = WebAssemblyHostBuilder . CreateDefault ( args ) ;
builder . RootComponents . Add < App > ( "#app" ) ;
builder . RootComponents . Add < HeadOutlet > ( "head::after" ) ;
// Other services are added.
builder . Services . AddFileSystemAccessService ( ) ;
await builder . Build ( ) . RunAsync ( ) ; 그런 다음 서비스를 다음과 같은 페이지에 주입 할 수 있습니다.
@inject IFileSystemAccessService FileSystemAccessService ; 그런 다음 IFileSystemAccessService 사용하여 파일 시스템 API에서 사용 가능한 세 가지 대화 상자 중 하나를 열 수 있습니다.
< button @onclick = " OpenAndReadFile " >Open File Picker for Single File and Read</ button >
< br />
@Text
@code {
private string Text = " " ;
private async Task OpenAndReadFile ()
{
FileSystemFileHandle ? fileHandle = null ;
try
{
OpenFilePickerOptionsStartInWellKnownDirectory options = new ()
{
Multiple = false ,
StartIn = WellKnownDirectory . Downloads
};
var fileHandles = await FileSystemAccessService . ShowOpenFilePickerAsync ( options );
fileHandle = fileHandles . Single ();
}
catch ( JSException ex )
{
// Handle Exception or cancelation of File Access prompt
Console . WriteLine ( ex );
}
finally
{
if ( fileHandle is not null )
{
var file = await fileHandle . GetFileAsync ();
Text = await file . TextAsync ();
StateHasChanged ();
}
}
}
}패키지에 오류가 있거나 기능을 원하는 경우 저장소에서 문제를 열어주십시오.
알려진 문제는 스트림을 사용하여 Blazor 서버에서 많은 양의 데이터를 스트리밍하는 것이 지원되지 않는다는 것입니다.
이 프로젝트는 Blazor.filesystem 패키지를 사용하여 FileSystemHandle 및 FileSystemDirectoryHandle S FileSystemFileHande 모두 RichystemHandle로 반환합니다.
이 저장소는 영감과 다음 일련의 기사의 도움으로 구축되었습니다.