{"id":15092981,"url":"https://github.com/tewr/blazorfilereader","last_synced_at":"2025-05-14T10:14:07.472Z","repository":{"id":45262178,"uuid":"136389408","full_name":"Tewr/BlazorFileReader","owner":"Tewr","description":"Library for creating read-only file streams from file input elements or drop targets in Blazor.","archived":false,"fork":false,"pushed_at":"2024-12-05T22:06:18.000Z","size":133044,"stargazers_count":424,"open_issues_count":4,"forks_count":62,"subscribers_count":15,"default_branch":"main","last_synced_at":"2025-04-06T14:01:35.232Z","etag":null,"topics":["blazor","c-sharp","stream","webassembly"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Tewr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-06-06T21:44:48.000Z","updated_at":"2025-03-05T13:32:01.000Z","dependencies_parsed_at":"2024-12-21T20:02:10.857Z","dependency_job_id":"b1a534d9-0e90-448b-ba4a-3d70ba8500b6","html_url":"https://github.com/Tewr/BlazorFileReader","commit_stats":{"total_commits":277,"total_committers":10,"mean_commits":27.7,"dds":"0.31046931407942235","last_synced_commit":"e5fc3a8c22cfdc9cb88634eb1bd801dc1f4f7f2e"},"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tewr%2FBlazorFileReader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tewr%2FBlazorFileReader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tewr%2FBlazorFileReader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tewr%2FBlazorFileReader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Tewr","download_url":"https://codeload.github.com/Tewr/BlazorFileReader/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248747819,"owners_count":21155522,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blazor","c-sharp","stream","webassembly"],"created_at":"2024-09-25T11:02:28.840Z","updated_at":"2025-04-13T16:43:50.837Z","avatar_url":"https://github.com/Tewr.png","language":"C#","funding_links":["https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=AC77J8GFQ6LYA\u0026item_name=Blazor+File+Reader+Project\u0026currency_code=EUR\u0026source=url"],"categories":[],"sub_categories":[],"readme":"[![Build status](https://ci.appveyor.com/api/projects/status/rr7pchwk7wbc3mn1/branch/main?svg=true)](https://ci.appveyor.com/project/Tewr/blazorfilereader/branch/main)\n[![NuGet](https://img.shields.io/nuget/dt/Tewr.Blazor.FileReader.svg?label=Tewr.Blazor.FileReader)](https://www.nuget.org/packages/Tewr.Blazor.FileReader)\n[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=AC77J8GFQ6LYA\u0026item_name=Blazor+File+Reader+Project\u0026currency_code=EUR\u0026source=url)\n\n\u003cp align=\"center\"\u003e\n  \u003cimg width=\"150\" height=\"150\" src=\"icon.svg\" align=\"right\"\u003e\n\u003c/p\u003e\n\n# BlazorFileReader\nBlazor library exposing read-only file streams in [Blazor](https://github.com/dotnet/aspnetcore/tree/master/src/Components#blazor) \n using ```\u003cinput type=\"file\" /\u003e```\nand [FileReader](https://developer.mozilla.org/en-US/docs/Web/API/FileReader). Drag and drop targets may also be used to initialize streams.\n\nHere is a [Live demo](https://tewr.github.io/BlazorFileReader/) that contains the output of [the wasm demo project](src/Demo/Blazor.FileReader.Wasm.Demo). Currently, its a build based on ```v3.2.0```.\n\n## Installation\n\nUse [Nuget](https://www.nuget.org/packages/Tewr.Blazor.FileReader): ```Install-Package Tewr.Blazor.FileReader```\n\nMake sure your environment is up to date with the appropriate SDK and VS2019 16.6. See [this article](https://devblogs.microsoft.com/aspnet/blazor-webassembly-3-2-0-preview-3-release-now-available/) for more details.\nDepending on your [project type](https://docs.microsoft.com/en-us/aspnet/core/razor-components/faq?view=aspnetcore-3.0), use one of the two examples below. \nFor a complete use-case, see the [client](src/Demo/Blazor.FileReader.Wasm.Demo) or [server-side](/src/Demo/Blazor.FileReader.ServerSide.Demo) demo projects.\n\n### Client-side / Wasm Project type / \"CSB\"\n\nSetup IoC for ```IFileReaderService```as in ([Program.cs](/src/Demo/Blazor.FileReader.Wasm.Demo/Program.cs#L13)):\n\n```cs\nservices.AddFileReaderService(options =\u003e options.UseWasmSharedBuffer = true);\n\n```\n\n### Server-side / asp.net core Project type / \"SSB\"\n\nSetup IoC for  ```IFileReaderService``` as in the example ([Startup.cs](src/Demo/Blazor.FileReader.ServerSide.Demo/Startup.cs#L16)):\n\n```cs\nservices.AddFileReaderService();\n\n```\n## Documentation\n\nThe public API is documented [here](src/Blazor.FileReader/Tewr.Blazor.FileReader.md), generated from the XML comments. \n\nTo get started, the best is to look at the example razor files in the [demo project](src/Demo/Blazor.FileReader.Demo.Common).\n\n\n\u003cdetails\u003e\u003csummary\u003eServerside/SSB: Important usage notice for versions prior to 2.1\u003c/summary\u003e\n\nOptional SignalR Configuration for large buffer sizes\n\nThe following notice is important for versions prior to 2.1. As of 2.1, it is no longer neccessary to modify `MaximumReceiveMessageSize`. While doing so may slightly increase transfer speed, _\"we recommend \u003c 32K per message since they are being stored in a ring buffer (default size 5000). Storing larger messages will be awful for performance\"_ (\u003ca href=\"https://github.com/SignalR/SignalR/issues/1205\"\u003e@DavidFowl, msft, 2012\u003c/a\u003e).\n\nFor server-side hosting, `bufferSize` + metadata (up to ~30%, depending on `buffersize`) should not exceed the SignalR `MaximumReceiveMessageSize` setting, or you will encounter a client-side exception if the file is larger than `bufferSize`.\nMake sure `MaximumReceiveMessageSize` exceeds your `bufferSize` with 30% to be on the safe side. It is also recommended to set a fixed upper file size in the input tag or validate `file.Size` in code before starting the uploading. The default settings is `32KB`. Thus, if you leave this setting untouched, you should not use a buffer size exceeding `22KB`.\n\nYou can set the `MaximumReceiveMessageSize` like this in `Startup.cs` (creds [@ADefWebserver](https://github.com/ADefWebserver) for mentioning this). [Microsoft Docs](https://docs.microsoft.com/en-us/aspnet/core/signalr/configuration?view=aspnetcore-3.0\u0026tabs=dotnet#configure-server-options)\n```\nservices.AddServerSideBlazor().AddHubOptions(o =\u003e\n{\n    o.MaximumReceiveMessageSize = 10 * 1024 * 1024; // 10MB\n});\n```\n\u003c/details\u003e\n\n## Gotcha's\n\n### Problems with reading strings using StreamReader in while header\nWhen publishing or compiling in Release mode, the \u003ccode\u003eOptimize\u003c/code\u003e flag is set by default. \nCompiling with this flag set may result in problems if you are using \u003ccode\u003eStreamReader\u003c/code\u003e.\nAn [bug is open on this subject](https://github.com/mono/mono/issues/19936), being investigated by the mono team. Tracked locally [here](https://github.com/Tewr/BlazorFileReader/issues/132).\nA simple workaround is available in [this issue](https://github.com/Tewr/BlazorFileReader/issues/97). Basically, don't call await in the while header, call it somewhere else.\nThis has been fixed in Blazor 5rc1.\n\n### IFileReference.CreateMemoryStreamAsync()\nThe `IFileReference.CreateMemoryStreamAsync()` method (without any argument) is basically the same as calling `IFileReference.CreateMemoryStreamAsync(bufferSize: file.Size)`.\nCalling `IFileReference.CreateMemoryStreamAsync()` may thus be unsuitable for large files (at least for client-side Blazor as the UI will be blocked during the transfer).\n\n## Usage in a Blazor View\n\nThe code for views looks the same for both [client](src/Demo/Blazor.FileReader.Wasm.Demo)- and [server-side](/src/Demo/Blazor.FileReader.ServerSide.Demo) projects. The demo projects also contains [a drag and drop example](src/Demo/Blazor.FileReader.Demo.Common/DragnDropCommon.razor). While the demo projects are the reference, examples also exist in the [wiki](https://github.com/Tewr/BlazorFileReader/wiki).\n\n```cs\n@page \"/MyPage\"\n@using Tewr.Blazor.FileReader\n@using System.IO;\n@inject IFileReaderService fileReaderService;\n\n\u003cinput type=\"file\" @ref=inputTypeFileElement /\u003e\u003cbutton @onclick=ReadFile\u003eRead file\u003c/button\u003e\n\n@code\n{\n    private ElementReference inputTypeFileElement;\n\n    public async Task ReadFile()\n    {\n        foreach (var file in await fileReaderService.CreateReference(inputTypeFileElement).EnumerateFilesAsync())\n        {\n            // Read into buffer and act (uses less memory)\n            await using (Stream stream = await file.OpenReadAsync()) {\n                // Do (async) stuff with stream...\n                await stream.ReadAsync(buffer, ...);\n                // The following will fail. Only async read is allowed.\n                stream.Read(buffer, ...)\n            }\n\n            // Read file fully into memory and act\n            using (MemoryStream memoryStream = await file.CreateMemoryStreamAsync(4096)) {\n                // Sync calls are ok once file is in memory\n                memoryStream.Read(buffer, ...)\n            }\n        }\n    }\n}\n```\n\n## Version notes\nVersion \u003ccode\u003e3.4.0.24340\u003c/code\u003e Adds dotnet9 support\n\nVersion \u003ccode\u003e3.3.2.23201\u003c/code\u003e Fixes a \u003ca href=\"https://github.com/Tewr/BlazorFileReader/issues/194\"\u003ea bug\u003c/a\u003e in 3.3.2.23185 related to drag and drop\n\nVersion \u003ccode\u003e3.3.2.23185\u003c/code\u003e Adds the possibility to drop multiple files and directories on elements.\n  \nVersion \u003ccode\u003e3.3.1.21360\u003c/code\u003e Fixes \u003ca href=\"https://github.com/Tewr/BlazorFileReader/issues/186\"\u003ea bug\u003c/a\u003e related to platform detection under .net6\n  \nVersion \u003ccode\u003e3.3.0.21348\u003c/code\u003e Adds .Net6 support.\n  \nVersion \u003ccode\u003e3.2.0.21211\u003c/code\u003e Adds [Copy/Paste](https://github.com/Tewr/BlazorFileReader/blob/main/src/Blazor.FileReader/Tewr.Blazor.FileReader.md#M-Tewr-Blazor-FileReader-IFileReaderRef-RegisterPasteEventAsync-Tewr-Blazor-FileReader-DropEvents-PasteEventOptions-) support.\n\nVersion \u003ccode\u003e3.1.0.21158\u003c/code\u003e Adds two new methods (.NET5 only): \n[JsObjectReference](src/Blazor.FileReader/Tewr.Blazor.FileReader.md#M-Tewr-Blazor-FileReader-IFileReference-GetJSObjectReferenceAsync) for files, and [CreateObjectUrl](src/Blazor.FileReader/Tewr.Blazor.FileReader.md#getobjecturlasync-method) for files (built on JsObjectReference).\nAdds a new overload for [IFileReaderRef.RegisterDropEventsAsync](src/Blazor.FileReader/Tewr.Blazor.FileReader.md#M-Tewr-Blazor-FileReader-IFileReaderRef-RegisterDropEventsAsync-Tewr-Blazor-FileReader-DropEvents-DropEventsOptions-) that provides extensibility points for custom scripts.\n\nVersion \u003ccode\u003e3.0.0.20340\u003c/code\u003e Add support for .NET5 and fixes a small issue with Platform detection.\n\n\u003cdetails\u003e\u003csummary\u003eOlder versions\u003c/summary\u003e\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e2.1.0.20274\u003c/code\u003e\u003c/summary\u003e  WASM/CSB: Fixes a problem with large files and small buffer sizes.\nServer-side/SSB: Simplifies Setup, removes need for SignalR max size setting (`MaximumReceiveMessageSize`). It is recommended to remove the modification of this value, if present. Adds multithreaded fetch \u0026 message chunking for SignalR.\u003c/details\u003e\n  \n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e2.0.0.20242\u003c/code\u003e\u003c/summary\u003e Fixes a bug when working with file larger than 2Gb in InteropStream.Seek (#153)\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e2.0.0.20200\u003c/code\u003e\u003c/summary\u003e ⚠️ Breaking changes: Changes Root Namespace from `Blazor.FileReader` to `Tewr.Blazor.FileReader` to avoid conflicts.\n- `CancellationToken` can now be used in most relevant methods to cancel ongoing upload.\n- Native support for displaying progress. See \u003ca href=\"/src/Demo/Blazor.FileReader.Demo.Common/IndexCommon.razor#L74\"\u003edemo project\u003c/a\u003e for usage.\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e1.6.0.20166\u003c/code\u003e\u003c/summary\u003e Fixes a \u003ca href=\"https://github.com/Tewr/BlazorFileReader/issues/139\"\u003ea memory allocation bug\u003c/a\u003e (before this fix - since \u003ccode\u003ev1.3.0.20033\u003c/code\u003e - the browser would allocate the whole file in ram). \nAlso, introduces a new collection property on \u003ccode\u003eFile\u003c/code\u003e for non-standard properties (thanks to \u003ca href=\"https://github.com/DouglasDwyer/\"\u003e@DouglasDwyer\u003c/a\u003e for idea and implementation)\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e1.5.0.20109\u003c/code\u003e\u003c/summary\u003e Fixes a \u003ca href=\"https://github.com/Tewr/BlazorFileReader/issues/124\"\u003ea minor bug\u003c/a\u003e in drag and drop (before this fix, could not drop on child elements) \u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e1.5.0.20093\u003c/code\u003e\u003c/summary\u003e reverts a dependency to latest stable version of \u003ccode\u003eMicrosoft.AspNetCore.Components (5.0.0-preview.1.20124.5 -\u003e 3.1.3)\u003c/code\u003e\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e1.5.0.20092\u003c/code\u003e\u003c/summary\u003e adds compatibility with Blazor 3.2 (CSB / Wasm) preview 3. Package now depends on latest version of \u003ccode\u003eMicrosoft.AspNetCore.Components (3.0.0 -\u003e 5.0.0-preview.1.20124.5)\u003c/code\u003e\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e1.4.0.20072\u003c/code\u003e\u003c/summary\u003e adds compatibility with Blazor 3.2 (CSB / Wasm) preview 2. Also Adds support for the \u003ccode\u003eIAsyncDisposable\u003c/code\u003e interface.\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e1.3.0.20049\u003c/code\u003e\u003c/summary\u003e fixes \u003ca href=\"https://github.com/Tewr/BlazorFileReader/issues/55\"\u003ea bug\u003c/a\u003e that would throw an exception when attempting to use reflection on the assembly (Server-side / SSB).\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e1.3.0.20041\u003c/code\u003e\u003c/summary\u003e fixes a faulty assembly version in the package.\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e1.3.0.20033\u003c/code\u003e\u003c/summary\u003e adds compatibility with Blazor 3.2 (CSB / Wasm). Attention, \u003ccode\u003eReadAsync\u003c/code\u003e is no longer a fully async implementation and may run on the UI thread. If you are using a progress bar or similar progress reporting it might be necessary to yield back to the renderer. See the demo project for an example - it is using \u003ccode\u003eawait Task.Delay(1);\u003c/code\u003e to render while reading.\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e1.2.0.19363\u003c/code\u003e\u003c/summary\u003e fixes a bug in how the offset parameter is interpreted - now represents target buffer offset, not source buffer offset. The setup option \u003ccode\u003eInitializeOnFirstCall\u003c/code\u003e now defaults to \u003ccode\u003etrue\u003c/code\u003e.\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e1.1.0.19274\u003c/code\u003e\u003c/summary\u003e adds a parameter to \u003ccode\u003eIFileReaderRef.RegisterDropEventsAsync\u003c/code\u003e for specifying additive drag n drop: When called with parameter set to true, will not reset file list of drop target (see \u003ca href=\"https://github.com/Tewr/BlazorFileReader/blob/821a8307743d23375642bf9db505d3377dcdf8f3/src/Demo/Blazor.FileReader.Demo.Common/DragnDropCommon.razor#L72\"\u003edemo\u003c/a\u003e for usage). Thanks \u003ca href=\"https://github.com/DNF-Sas\"\u003e@DNF-SaS\u003c/a\u003e for the \u003ca href=\"https://github.com/Tewr/BlazorFileReader/issues/91\"\u003efeature suggestion\u003c/a\u003e.\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e1.0.0.19267\u003c/code\u003e\u003c/summary\u003e adds support for \u003ccode\u003ev3.0.100\u003c/code\u003e\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e0.16.0.19262\u003c/code\u003e\u003c/summary\u003e fixes \u003ca href=\"https://github.com/Tewr/BlazorFileReader/issues/55\"\u003ea packaging issue\u003c/a\u003e.\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e0.16.0.19261\u003c/code\u003e\u003c/summary\u003e adds support for \u003ccode\u003ev3.0.100-rc1-014190\u003c/code\u003e\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e0.15.0.19242\u003c/code\u003e\u003c/summary\u003e adds support for \u003ccode\u003ev3.0.0-preview9-014004\u003c/code\u003e. Also fixes \u003ca href=\"https://github.com/Tewr/BlazorFileReader/issues/55\"\u003ea minor packaging issue\u003c/a\u003e. New API: \u003ca href=\"https://github.com/Tewr/BlazorFileReader/blob/d9cdea5d954eeac6f3ba2a99ec5dbc9181bc23de/src/Blazor.FileReader/FileReaderRef.cs#L50\"\u003eIBase64Stream\u003c/a\u003e, for optimizing third-party cloud uploads (data exposed as raw base64 strings). Mostly interesting for server-side deployments.\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e0.14.19242\u003c/code\u003e\u003c/summary\u003e fixes \u003ca href=\"https://github.com/Tewr/BlazorFileReader/issues/71\"\u003ea possible race condition for server-side initialization\u003c/a\u003e.\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e0.14.19226\u003c/code\u003e\u003c/summary\u003e adds support for sdk  \u003ccode\u003e3.0.0-preview8-013656\u003c/code\u003e. Adds shared Buffer back again for WASM, this can be activated by setting the \u003ccode\u003eUseWasmSharedBuffer\u003c/code\u003e option to true (recommended).\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e0.13.19207\u003c/code\u003e\u003c/summary\u003e` Fixes a regression with the \u003ccode\u003eClearValue\u003c/code\u003e method and adds some essential events to the drag and drop api.\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e0.13.19206\u003c/code\u003e\u003c/summary\u003e adds support for sdk \u003ccode\u003e3.0.0-preview7.19365.7\u003c/code\u003e. New feature: Drag and drop (contribution by \u003ca href=\"https://github.com/catlan\"\u003e@catlan\u003c/a\u003e)\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e0.12.19186\u003c/code\u003e\u003c/summary\u003e fixes an issue with server-side setup which was only visible when having multiple users.\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e0.12.19168\u003c/code\u003e\u003c/summary\u003e adds support for sdk \u003ccode\u003e3.0.0-preview6.19307.2\u003c/code\u003e, and several issues are resolved with this release, notably meticulous setup and issues with buffer size for server-side projects. Also, the Wasm helper package has been deprecated.\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e0.11.0\u003c/code\u003e\u003c/summary\u003e adds support for sdk \u003ccode\u003e3.0.0-preview5-19227-01\u003c/code\u003e. It also introduces a tiny feature: The \u003ccode\u003eIFileReaderRef.ClearValue()\u003c/code\u003e method, used to clear the value of a referenced file input. Also, fixes a bug in Edge and a package issue.\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersion \u003ccode\u003e0.10.0\u003c/code\u003e\u003c/summary\u003e adds support for sdk \u003ccode\u003ev3.0.0-preview-4-19216-03\u003c/code\u003e\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersions \u003ccode\u003e0.9.0\u003c/code\u003e\u003c/summary\u003e introduces a small helper-package for the IoC setup of Wasm, injecting an implementation of \u003ccode\u003eIInvokeUnmarshalled\u003c/code\u003e.\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersions \u003ccode\u003e0.8.0\u003c/code\u003e\u003c/summary\u003e requires copy-paste implementation of \u003ccode\u003eIInvokeUnmarshalled\u003c/code\u003e.\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersions previous to \u003ccode\u003e0.7.1\u003c/code\u003e\u003c/summary\u003e did not support server-side Blazor and would throw \u003ccode\u003e[System.PlatformNotSupportedException] Requires MonoWebAssemblyJSRuntime as the JSRuntime\u003c/code\u003e.\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eVersions previous to \u003ccode\u003e0.5.1\u003c/code\u003e\u003c/summary\u003e wrapped the input element in a Blazor Component, this has been removed for better configurability and general lack of value.\u003c/details\u003e\n\u003c/details\u003e\n\n# Standard upload component\n📰 01.10.2020 Microsoft has released a built-in file upload component called [InputFile](https://docs.microsoft.com/en-us/aspnet/core/blazor/file-uploads?view=aspnetcore-5.0). For the most common and simple scenarios, I'd recommend using the built-in component rather than \u003ccode\u003eBlazorFileReader\u003c/code\u003e. The \u003ccode\u003eBlazorFileReader\u003c/code\u003e library gives more control over buffer size and memory usage, which may be to your advantage when working with large files. Also, not really being a blazor component, but rather a service that binds to an element, it may at times offer more flexibility.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftewr%2Fblazorfilereader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftewr%2Fblazorfilereader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftewr%2Fblazorfilereader/lists"}