ブラウザAPIファイルシステムアクセスのためのBlazorラッパー
APIにより、ファイルとディレクトリの両方のブラウザからローカルファイルシステムに読み書きできるようになります。
免責事項:APIは、限られたブラウザのセットでサポートされています。 Firefox、Android用Chrome、およびiOSモバイルブラウザーではサポートされていない最も目立ちます。
サンプルプロジェクトは、https://kristofferstrube.github.io/blazor.filessystemaccess/でデモすることができます
各ページで、右上隅にある例の対応するコードを見つけることができます。
メインページでは、APIが使用済みブラウザで少なくとも最小限のサポートがあるかどうかを確認できます。
ステータスページで、このラッパーがカバーしているWebIDL仕様の量を確認できます。
ライブラリを使用するには、.NET 7.0以下をインストールする必要があります。
ダウンロード.NET 7
IDEにパッケージマネージャーを使用して、またはコマンドラインを使用してパッケージマネージャーを使用してNugetを介してパッケージをインストールできます。
dotnet add package KristofferStrube.Blazor.FileSystemAccessこのパッケージは、Blazor WebAssemblyおよびBlazor Serverプロジェクトで使用できます。 (帯域幅の問題により、Blazor Serverでは大きなファイルのストリーミングはサポートされていないことに注意してください。)
また、ページで使用するためにパッケージを参照する必要があります。これは、以下を追加することで_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を使用して、このようなファイルSystemAccess APIで利用可能な3つのダイアログのいずれかを開くことができます。
< 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 Serverで大量のデータをストリーミングするためにストリームを使用してサポートされていないことです。
このプロジェクトでは、 blazor.filesystemパッケージを使用して、リッチFileSystemHandleを返すファイルFileSystemFileHande sとFileSystemDirectoryHandle sの両方を返します。
このリポジトリは、次の一連の記事からインスピレーションと支援を受けて構築されました。