Skip to content

Commit a15a1c2

Browse files
authored
Net6 support (#184)
* Replace classic FieldOffset interop method with framework stream implementation. Using the same chunking method as before, for now * Add disposal of SteamReference. * using-> await using * Just some cleanup before rewriting demo project * Update demo wasm project for net6 * Fixes annoying map error * Server-side project * Fix some using error
1 parent 3440775 commit a15a1c2

File tree

91 files changed

+3055
-109
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

91 files changed

+3055
-109
lines changed

src/Blazor.FileReader.sln

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
3-
# Visual Studio Version 16
4-
VisualStudioVersion = 16.0.28531.58
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.0.31808.319
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Blazor.FileReader", "Blazor.FileReader\Blazor.FileReader.csproj", "{5F8084DD-9D88-4407-BCFC-15C71C5AF11E}"
77
EndProject
@@ -27,6 +27,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tewr.Blazor.FileReader.E2ET
2727
EndProject
2828
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tewr.Blazor.FileReader.UnitTests", "..\tests\Tewr.Blazor.FileReader.UnitTests\Tewr.Blazor.FileReader.UnitTests.csproj", "{38F452ED-A8E3-4CED-890C-E2E6DB6F54AF}"
2929
EndProject
30+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Net6", "Net6", "{C3DC632D-7249-4B55-A0F4-68742064C71F}"
31+
EndProject
32+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Blazor.FileReader.Wasm.Demo", "Demo\Net6\Blazor.FileReader.Wasm.Demo\Blazor.FileReader.Wasm.Demo.csproj", "{96778444-7F44-4CF8-B8B2-4124865A826A}"
33+
EndProject
34+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Blazor.FileReader.ServerSide.Demo", "Demo\Net6\Blazor.FileReader.ServerSide.Demo\Blazor.FileReader.ServerSide.Demo.csproj", "{4AFCC00A-7CC4-4143-9D12-0E0E3CA4A630}"
35+
EndProject
3036
Global
3137
GlobalSection(SolutionConfigurationPlatforms) = preSolution
3238
Debug|Any CPU = Debug|Any CPU
@@ -81,6 +87,18 @@ Global
8187
{38F452ED-A8E3-4CED-890C-E2E6DB6F54AF}.Ghpages|Any CPU.Build.0 = Debug|Any CPU
8288
{38F452ED-A8E3-4CED-890C-E2E6DB6F54AF}.Release|Any CPU.ActiveCfg = Release|Any CPU
8389
{38F452ED-A8E3-4CED-890C-E2E6DB6F54AF}.Release|Any CPU.Build.0 = Release|Any CPU
90+
{96778444-7F44-4CF8-B8B2-4124865A826A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
91+
{96778444-7F44-4CF8-B8B2-4124865A826A}.Debug|Any CPU.Build.0 = Debug|Any CPU
92+
{96778444-7F44-4CF8-B8B2-4124865A826A}.Ghpages|Any CPU.ActiveCfg = Debug|Any CPU
93+
{96778444-7F44-4CF8-B8B2-4124865A826A}.Ghpages|Any CPU.Build.0 = Debug|Any CPU
94+
{96778444-7F44-4CF8-B8B2-4124865A826A}.Release|Any CPU.ActiveCfg = Release|Any CPU
95+
{96778444-7F44-4CF8-B8B2-4124865A826A}.Release|Any CPU.Build.0 = Release|Any CPU
96+
{4AFCC00A-7CC4-4143-9D12-0E0E3CA4A630}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
97+
{4AFCC00A-7CC4-4143-9D12-0E0E3CA4A630}.Debug|Any CPU.Build.0 = Debug|Any CPU
98+
{4AFCC00A-7CC4-4143-9D12-0E0E3CA4A630}.Ghpages|Any CPU.ActiveCfg = Debug|Any CPU
99+
{4AFCC00A-7CC4-4143-9D12-0E0E3CA4A630}.Ghpages|Any CPU.Build.0 = Debug|Any CPU
100+
{4AFCC00A-7CC4-4143-9D12-0E0E3CA4A630}.Release|Any CPU.ActiveCfg = Release|Any CPU
101+
{4AFCC00A-7CC4-4143-9D12-0E0E3CA4A630}.Release|Any CPU.Build.0 = Release|Any CPU
84102
EndGlobalSection
85103
GlobalSection(SolutionProperties) = preSolution
86104
HideSolutionNode = FALSE
@@ -95,6 +113,9 @@ Global
95113
{AEA2CBDF-329E-4B17-9B02-4178D045F528} = {856A3F73-2C95-4E2E-819C-41F6456EE049}
96114
{14C576CC-9CFA-49E7-B48F-2C8E03A9B76D} = {9A262CB5-8352-42D0-830C-D87131D9060B}
97115
{38F452ED-A8E3-4CED-890C-E2E6DB6F54AF} = {9A262CB5-8352-42D0-830C-D87131D9060B}
116+
{C3DC632D-7249-4B55-A0F4-68742064C71F} = {8AA482CE-0130-43A1-84BC-92215AF25AED}
117+
{96778444-7F44-4CF8-B8B2-4124865A826A} = {C3DC632D-7249-4B55-A0F4-68742064C71F}
118+
{4AFCC00A-7CC4-4143-9D12-0E0E3CA4A630} = {C3DC632D-7249-4B55-A0F4-68742064C71F}
98119
EndGlobalSection
99120
GlobalSection(ExtensibilityGlobals) = postSolution
100121
SolutionGuid = {7BCBB258-C07A-4039-838A-09F3B45F7E58}

src/Blazor.FileReader/Blazor.FileReader.csproj

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33

44
<PropertyGroup>
5-
<TargetFrameworks>netstandard2.0;net5.0</TargetFrameworks>
5+
<TargetFrameworks>netstandard2.0;net5.0;net6.0</TargetFrameworks>
66
<BlazorLinkOnBuild>true</BlazorLinkOnBuild>
77
<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
88
<LangVersion>latest</LangVersion>
@@ -14,15 +14,15 @@
1414
<PackageTags>blazor blazor-component stream filestream file-stream read-file filereader</PackageTags>
1515
<Configurations>Debug;Release;Ghpages</Configurations>
1616
<PackageId>Tewr.Blazor.FileReader</PackageId>
17-
<PackageReleaseNotes>Copy-paste API</PackageReleaseNotes>
17+
<PackageReleaseNotes>net6 support</PackageReleaseNotes>
1818
<PackageLicenseExpression>MIT</PackageLicenseExpression>
1919
<PackageIcon>icon.png</PackageIcon>
2020
<RazorLangVersion>3.0</RazorLangVersion>
2121
<AssemblyName>Tewr.Blazor.FileReader</AssemblyName>
2222
<RootNamespace>Tewr.Blazor.FileReader</RootNamespace>
23-
<AssemblyVersion>3.2.0.21211</AssemblyVersion>
24-
<Version>3.2.0.21211</Version>
25-
<FileVersion>3.2.0.21211</FileVersion>
23+
<AssemblyVersion>3.3.0.21348</AssemblyVersion>
24+
<Version>3.3.0.21348</Version>
25+
<FileVersion>3.3.0.21348</FileVersion>
2626
</PropertyGroup>
2727
<ItemGroup>
2828
<None Include="icon.png" Pack="true" Visible="false" PackagePath="" />
@@ -44,6 +44,11 @@
4444
<EmbeddedResource Include="wwwroot\**\*.js" LogicalName="blazor:js:%(RecursiveDir)%(Filename)%(Extension)" />
4545
</ItemGroup>
4646

47+
<ItemGroup Condition="'$(TargetFramework)'=='net6.0'">
48+
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="6.0.0" />
49+
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="6.0.0" />
50+
</ItemGroup>
51+
4752
<ItemGroup Condition="'$(TargetFramework)'=='net5.0'">
4853
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="5.0.0" />
4954
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="5.0.0" />

src/Blazor.FileReader/FileReaderJsInterop.cs

Lines changed: 53 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ public partial class FileReaderJsInterop
2020
private static readonly Dictionary<long, TaskCompletionSource<int>> _readFileUnmarshalledCalls
2121
= new Dictionary<long, TaskCompletionSource<int>>();
2222

23+
24+
2325
internal IJSRuntime CurrentJSRuntime;
2426
internal IJSUnmarshalledRuntime UnmarshalledRuntime;
2527

@@ -53,25 +55,25 @@ internal void Initialize()
5355
internal async Task<bool> RegisterDropEvents(ElementReference elementReference, DropEventsOptions options)
5456
{
5557
await EnsureInitializedAsync();
56-
return await CurrentJSRuntime.InvokeAsync<bool>($"FileReaderComponent.RegisterDropEvents", elementReference, options);
58+
return await CurrentJSRuntime.InvokeAsync<bool>(FileReaderComponent.RegisterDropEvents, elementReference, options);
5759
}
5860

5961
public async Task<bool> UnregisterDropEvents(ElementReference elementReference)
6062
{
6163
await EnsureInitializedAsync();
62-
return await CurrentJSRuntime.InvokeAsync<bool>($"FileReaderComponent.UnregisterDropEvents", elementReference);
64+
return await CurrentJSRuntime.InvokeAsync<bool>(FileReaderComponent.UnregisterDropEvents, elementReference);
6365
}
6466

6567
internal async Task<bool> RegisterPasteEvent(ElementReference elementReference, PasteEventOptions options)
6668
{
6769
await EnsureInitializedAsync();
68-
return await CurrentJSRuntime.InvokeAsync<bool>($"FileReaderComponent.RegisterPasteEvent", elementReference, options);
70+
return await CurrentJSRuntime.InvokeAsync<bool>(FileReaderComponent.RegisterPasteEvent, elementReference, options);
6971
}
7072

7173
public async Task<bool> UnregisterPasteEvent(ElementReference elementReference)
7274
{
7375
await EnsureInitializedAsync();
74-
return await CurrentJSRuntime.InvokeAsync<bool>($"FileReaderComponent.UnregisterPasteEvent", elementReference);
76+
return await CurrentJSRuntime.InvokeAsync<bool>(FileReaderComponent.UnregisterPasteEvent, elementReference);
7577
}
7678

7779
public async Task<AsyncDisposableStream> OpenFileStream(ElementReference elementReference, int index, IFileInfo fileInfo)
@@ -87,18 +89,18 @@ public async Task<IBase64Stream> OpenBase64Stream(ElementReference elementRefere
8789
public async Task<int> GetFileCount(ElementReference elementReference)
8890
{
8991
await EnsureInitializedAsync();
90-
return (int)await CurrentJSRuntime.InvokeAsync<long>($"FileReaderComponent.GetFileCount", elementReference);
92+
return (int)await CurrentJSRuntime.InvokeAsync<long>(FileReaderComponent.GetFileCount, elementReference);
9193
}
9294

9395
public async Task<int> ClearValue(ElementReference elementReference)
9496
{
9597
await EnsureInitializedAsync();
96-
return (int)await CurrentJSRuntime.InvokeAsync<long>($"FileReaderComponent.ClearValue", elementReference);
98+
return (int)await CurrentJSRuntime.InvokeAsync<long>(FileReaderComponent.ClearValue, elementReference);
9799
}
98100

99101
public async Task<IFileInfo> GetFileInfoFromElement(ElementReference elementReference, int index)
100102
{
101-
return await CurrentJSRuntime.InvokeAsync<FileInfo>($"FileReaderComponent.GetFileInfoFromElement", elementReference, index);
103+
return await CurrentJSRuntime.InvokeAsync<FileInfo>(FileReaderComponent.GetFileInfoFromElement, elementReference, index);
102104
}
103105

104106
public async Task EnsureInitializedAsync(bool force = false)
@@ -113,19 +115,23 @@ public async Task EnsureInitializedAsync(bool force = false)
113115

114116
private async Task<int> OpenReadAsync(ElementReference elementReference, int fileIndex)
115117
{
116-
return (int)await CurrentJSRuntime.InvokeAsync<long>($"FileReaderComponent.OpenRead", elementReference, fileIndex, _options.UseWasmSharedBuffer);
118+
return (int)await CurrentJSRuntime.InvokeAsync<long>(FileReaderComponent.OpenRead, elementReference, fileIndex, _options.UseWasmSharedBuffer);
117119
}
118120

119121
private async Task<bool> DisposeStream(int fileRef)
120122
{
121-
return await CurrentJSRuntime.InvokeAsync<bool>($"FileReaderComponent.Dispose", fileRef);
123+
return await CurrentJSRuntime.InvokeAsync<bool>(FileReaderComponent.Dispose, fileRef);
122124
}
123125

124126
private async Task<int> ReadFileAsync(int fileRef, byte[] buffer, long position, long bufferOffset, int count, CancellationToken cancellationToken)
125127
{
126128
if (this._options.UseWasmSharedBuffer)
127129
{
130+
#if NET6_0_OR_GREATER
131+
return await ReadFileSliceAsync(fileRef, buffer, position, bufferOffset, count, cancellationToken);
132+
#else
128133
return await ReadFileUnmarshalledAsync(fileRef, buffer, position, bufferOffset, count, cancellationToken);
134+
#endif
129135
}
130136

131137
return await ReadFileMarshalledAsync(fileRef, buffer, position, bufferOffset, count, cancellationToken);
@@ -189,13 +195,25 @@ private async Task<string> ReadFileMarshalledBase64Async(
189195
{
190196
cancellationToken.ThrowIfCancellationRequested();
191197
var data = await CurrentJSRuntime.InvokeAsync<string>(
192-
$"FileReaderComponent.ReadFileMarshalledAsync", cancellationToken,
198+
FileReaderComponent.ReadFileMarshalledAsync, cancellationToken,
193199
new { position, count, fileRef });
194200

195201
return data;
196202

197203
}
198204

205+
#if NET6_0_OR_GREATER
206+
private async Task<int> ReadFileSliceAsync(
207+
int fileRef, byte[] buffer, long position, long bufferOffset, int count,
208+
CancellationToken cancellationToken)
209+
{
210+
await using var streamReference = await this.CurrentJSRuntime.InvokeAsync<IJSStreamReference>(
211+
FileReaderComponent.ReadFileSliceAsync, cancellationToken, fileRef, position, count);
212+
using var readStream = await streamReference.OpenReadStreamAsync(cancellationToken: cancellationToken);
213+
return await readStream.ReadAsync(buffer.AsMemory((int)bufferOffset, count), cancellationToken);
214+
}
215+
#endif
216+
199217
private async Task<int> ReadFileUnmarshalledAsync(
200218
int fileRef, byte[] buffer, long position, long bufferOffset, int count,
201219
CancellationToken cancellationToken)
@@ -207,7 +225,7 @@ private async Task<int> ReadFileUnmarshalledAsync(
207225

208226
// Buffer is not allocated here,
209227
UnmarshalledRuntime.InvokeUnmarshalled<ReadFileParams, int>(
210-
$"FileReaderComponent.ReadFileUnmarshalledAsync",
228+
FileReaderComponent.ReadFileUnmarshalledAsync,
211229
new ReadFileParams {
212230
BufferOffset = bufferOffset,
213231
Count = count,
@@ -221,7 +239,7 @@ private async Task<int> ReadFileUnmarshalledAsync(
221239

222240
// It is safely filled up here instead
223241
var bytesRead = UnmarshalledRuntime.InvokeUnmarshalled<BufferParams, int>(
224-
$"FileReaderComponent.FillBufferUnmarshalled",
242+
FileReaderComponent.FillBufferUnmarshalled,
225243
new BufferParams
226244
{
227245
TaskId = id,
@@ -260,10 +278,10 @@ public static void EndReadFileUnmarshalledAsyncError(long taskId, string error)
260278
taskCompletionSource.SetException(new BrowserFileReaderException(error));
261279
}
262280

263-
#if NET5
281+
#if NET5_0_OR_GREATER
264282
internal async Task<IJSObjectReference> GetJSObjectReferenceAsync(ElementReference elementRef, int fileIndex)
265283
{
266-
return await CurrentJSRuntime.InvokeAsync<IJSObjectReference>("FileReaderComponent.GetJSObjectReference", elementRef, fileIndex);
284+
return await CurrentJSRuntime.InvokeAsync<IJSObjectReference>(FileReaderComponent.GetJSObjectReference, elementRef, fileIndex);
267285
}
268286
#endif
269287

@@ -300,7 +318,7 @@ private async Task InitializeAsync()
300318

301319
private async Task<bool> IsLoaded()
302320
{
303-
return await CurrentJSRuntime.InvokeAsync<bool>("window.hasOwnProperty", "FileReaderComponent");
321+
return await CurrentJSRuntime.InvokeAsync<bool>("window.hasOwnProperty", FileReaderComponent.InstanceName);
304322
}
305323

306324
private async Task<T> ExecuteRawScriptAsync<T>(string scriptContent)
@@ -311,4 +329,24 @@ private async Task<T> ExecuteRawScriptAsync<T>(string scriptContent)
311329
return await CurrentJSRuntime.InvokeAsync<T>("eval", bootStrapScript);
312330
}
313331
}
332+
333+
internal static class FileReaderComponent
334+
{
335+
public static readonly string InstanceName = nameof(FileReaderComponent);
336+
337+
public static readonly string ClearValue = $"{InstanceName}.{nameof(ClearValue)}";
338+
public static readonly string Dispose = $"{InstanceName}.{nameof(Dispose)}";
339+
public static readonly string FillBufferUnmarshalled = $"{InstanceName}.{nameof(FillBufferUnmarshalled)}";
340+
public static readonly string GetFileCount = $"{InstanceName}.{nameof(GetFileCount)}";
341+
public static readonly string GetFileInfoFromElement = $"{InstanceName}.{nameof(GetFileInfoFromElement)}";
342+
public static readonly string GetJSObjectReference = $"{InstanceName}.{nameof(GetJSObjectReference)}";
343+
public static readonly string OpenRead = $"{InstanceName}.{nameof(OpenRead)}";
344+
public static readonly string ReadFileMarshalledAsync = $"{InstanceName}.{nameof(ReadFileMarshalledAsync)}";
345+
public static readonly string ReadFileSliceAsync = $"{InstanceName}.{nameof(ReadFileSliceAsync)}";
346+
public static readonly string ReadFileUnmarshalledAsync = $"{InstanceName}.{nameof(ReadFileUnmarshalledAsync)}";
347+
public static readonly string RegisterDropEvents = $"{InstanceName}.{nameof(RegisterDropEvents)}";
348+
public static readonly string RegisterPasteEvent = $"{InstanceName}.{nameof(RegisterPasteEvent)}";
349+
public static readonly string UnregisterDropEvents = $"{InstanceName}.{nameof(UnregisterDropEvents)}";
350+
public static readonly string UnregisterPasteEvent = $"{InstanceName}.{nameof(UnregisterPasteEvent)}";
351+
}
314352
}

src/Blazor.FileReader/FileReaderRef.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public interface IFileReaderRef
7474
public interface IFileReference
7575
{
7676

77-
#if NET5
77+
#if NET5_0_OR_GREATER
7878
/// <summary>
7979
/// Returns the underlying file object as an <see cref="IJSObjectReference"/>
8080
/// </summary>
@@ -332,7 +332,7 @@ private async Task<MemoryStream> InnerCreateMemoryStreamAsync(int bufferSize, Ca
332332
return memoryStream;
333333
}
334334

335-
#if NET5
335+
#if NET5_0_OR_GREATER
336336
public Task<IJSObjectReference> GetJSObjectReferenceAsync()
337337
{
338338
return this.fileLoaderRef.FileReaderJsInterop.GetJSObjectReferenceAsync(fileLoaderRef.ElementRef, this.index);

src/Blazor.FileReader/ObjectUrl.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace Tewr.Blazor.FileReader
99
{
10-
#if NET5
10+
#if NET5_0_OR_GREATER
1111

1212
/// <summary>
1313
/// Represents an object url for a file.

src/Blazor.FileReader/Tewr.Blazor.FileReader.md

Lines changed: 0 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,9 @@
6767
- [CreateMemoryStreamAsync()](#M-Tewr-Blazor-FileReader-IFileReference-CreateMemoryStreamAsync-System-Threading-CancellationToken- 'Tewr.Blazor.FileReader.IFileReference.CreateMemoryStreamAsync(System.Threading.CancellationToken)')
6868
- [CreateMemoryStreamAsync()](#M-Tewr-Blazor-FileReader-IFileReference-CreateMemoryStreamAsync-System-Int32- 'Tewr.Blazor.FileReader.IFileReference.CreateMemoryStreamAsync(System.Int32)')
6969
- [CreateMemoryStreamAsync()](#M-Tewr-Blazor-FileReader-IFileReference-CreateMemoryStreamAsync-System-Int32,System-Threading-CancellationToken- 'Tewr.Blazor.FileReader.IFileReference.CreateMemoryStreamAsync(System.Int32,System.Threading.CancellationToken)')
70-
- [GetJSObjectReferenceAsync()](#M-Tewr-Blazor-FileReader-IFileReference-GetJSObjectReferenceAsync 'Tewr.Blazor.FileReader.IFileReference.GetJSObjectReferenceAsync')
71-
- [GetObjectUrlAsync()](#M-Tewr-Blazor-FileReader-IFileReference-GetObjectUrlAsync 'Tewr.Blazor.FileReader.IFileReference.GetObjectUrlAsync')
7270
- [OpenReadAsync()](#M-Tewr-Blazor-FileReader-IFileReference-OpenReadAsync 'Tewr.Blazor.FileReader.IFileReference.OpenReadAsync')
7371
- [OpenReadBase64Async()](#M-Tewr-Blazor-FileReader-IFileReference-OpenReadBase64Async 'Tewr.Blazor.FileReader.IFileReference.OpenReadBase64Async')
7472
- [ReadFileInfoAsync()](#M-Tewr-Blazor-FileReader-IFileReference-ReadFileInfoAsync 'Tewr.Blazor.FileReader.IFileReference.ReadFileInfoAsync')
75-
- [IObjectUrl](#T-Tewr-Blazor-FileReader-IObjectUrl 'Tewr.Blazor.FileReader.IObjectUrl')
76-
- [Url](#P-Tewr-Blazor-FileReader-IObjectUrl-Url 'Tewr.Blazor.FileReader.IObjectUrl.Url')
7773
- [PasteEventOptions](#T-Tewr-Blazor-FileReader-DropEvents-PasteEventOptions 'Tewr.Blazor.FileReader.DropEvents.PasteEventOptions')
7874
- [Additive](#P-Tewr-Blazor-FileReader-DropEvents-PasteEventOptions-Additive 'Tewr.Blazor.FileReader.DropEvents.PasteEventOptions.Additive')
7975
- [PlatformConfig](#T-Tewr-Blazor-FileReader-PlatformConfig 'Tewr.Blazor.FileReader.PlatformConfig')
@@ -779,36 +775,6 @@ The length of the resulting [MemoryStream](http://msdn.microsoft.com/query/dev14
779775

780776
A [MemoryStream](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.IO.MemoryStream 'System.IO.MemoryStream') representing the full file, with [Position](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.IO.MemoryStream.Position 'System.IO.MemoryStream.Position') set to 0.
781777

782-
##### Parameters
783-
784-
This method has no parameters.
785-
786-
<a name='M-Tewr-Blazor-FileReader-IFileReference-GetJSObjectReferenceAsync'></a>
787-
### GetJSObjectReferenceAsync() `method`
788-
789-
##### Summary
790-
791-
Returns the underlying file object as an [IJSObjectReference](#T-Microsoft-JSInterop-IJSObjectReference 'Microsoft.JSInterop.IJSObjectReference')
792-
793-
##### Returns
794-
795-
796-
797-
##### Parameters
798-
799-
This method has no parameters.
800-
801-
<a name='M-Tewr-Blazor-FileReader-IFileReference-GetObjectUrlAsync'></a>
802-
### GetObjectUrlAsync() `method`
803-
804-
##### Summary
805-
806-
Returns an object url for a file.
807-
808-
##### Returns
809-
810-
811-
812778
##### Parameters
813779

814780
This method has no parameters.
@@ -858,28 +824,6 @@ An object containing the file metadata
858824

859825
This method has no parameters.
860826

861-
<a name='T-Tewr-Blazor-FileReader-IObjectUrl'></a>
862-
## IObjectUrl `type`
863-
864-
##### Namespace
865-
866-
Tewr.Blazor.FileReader
867-
868-
##### Summary
869-
870-
Represents an object url for a file.
871-
872-
##### Remarks
873-
874-
https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL
875-
876-
<a name='P-Tewr-Blazor-FileReader-IObjectUrl-Url'></a>
877-
### Url `property`
878-
879-
##### Summary
880-
881-
Returns the Object Url.
882-
883827
<a name='T-Tewr-Blazor-FileReader-DropEvents-PasteEventOptions'></a>
884828
## PasteEventOptions `type`
885829

0 commit comments

Comments
 (0)