© 2026 Hedgehog Software, LLC

TwitterGitHubDiscord
More
CommunitiesDocsAboutTermsPrivacy
Search
Star
Setup for Free
C#C
C#•2y ago•
5 replies
Davide Dunne

Blazor Server: Cannot access a closed Stream

I'm trying to export a list of objects to a csv and then make the user download it. I'm getting an error for having the stream closed. If I remove all the
using
using
in
GetFileStream
GetFileStream
I end up getting another error for Javascript not found
@using System.IO
@using CsvHelper
@using System.Globalization
@inject IJSRuntime JS
@code {
    [Parameter, EditorRequired]
    public IEnumerable<object>? objects { get; set; }
    [Parameter, EditorRequired]
    public string? FileName { get; set; }
    [Parameter, EditorRequired]
    public string? TextDisplay { get; set; }
    private Stream GetFileStream()
    {
        using var memoryStream = new MemoryStream();
        using var streamWriter = new StreamWriter(memoryStream);
        using var csvWriter = new CsvWriter(streamWriter, culture: CultureInfo.InvariantCulture);
        csvWriter.WriteRecords(objects);
        return memoryStream;
    }
    private async Task DownloadFileFromStream()
    {
        var fileStream = GetFileStream();
        using var streamRef = new DotNetStreamReference(stream: fileStream);
        await JS.InvokeVoidAsync("downloadFileFromStream", FileName, streamRef);
    }
}
<script>
    window.downloadFileFromStream = async (fileName, contentStreamReference) => {
        const arrayBuffer = await contentStreamReference.arrayBuffer();
        const blob = new Blob([arrayBuffer]);
        const url = URL.createObjectURL(blob);
        const anchorElement = document.createElement('a');
        anchorElement.href = url;
        anchorElement.download = fileName ?? '';
        anchorElement.click();
        anchorElement.remove();
        URL.revokeObjectURL(url);
    }
</script>
<MudIconButton Icon="@Icons.Material.Filled.Download" Color="Color.Secondary" Size="Size.Small" aria-label="Export to CSV" OnClick="DownloadFileFromStream">@TextDisplay</MudIconButton>
@using System.IO
@using CsvHelper
@using System.Globalization
@inject IJSRuntime JS
@code {
    [Parameter, EditorRequired]
    public IEnumerable<object>? objects { get; set; }
    [Parameter, EditorRequired]
    public string? FileName { get; set; }
    [Parameter, EditorRequired]
    public string? TextDisplay { get; set; }
    private Stream GetFileStream()
    {
        using var memoryStream = new MemoryStream();
        using var streamWriter = new StreamWriter(memoryStream);
        using var csvWriter = new CsvWriter(streamWriter, culture: CultureInfo.InvariantCulture);
        csvWriter.WriteRecords(objects);
        return memoryStream;
    }
    private async Task DownloadFileFromStream()
    {
        var fileStream = GetFileStream();
        using var streamRef = new DotNetStreamReference(stream: fileStream);
        await JS.InvokeVoidAsync("downloadFileFromStream", FileName, streamRef);
    }
}
<script>
    window.downloadFileFromStream = async (fileName, contentStreamReference) => {
        const arrayBuffer = await contentStreamReference.arrayBuffer();
        const blob = new Blob([arrayBuffer]);
        const url = URL.createObjectURL(blob);
        const anchorElement = document.createElement('a');
        anchorElement.href = url;
        anchorElement.download = fileName ?? '';
        anchorElement.click();
        anchorElement.remove();
        URL.revokeObjectURL(url);
    }
</script>
<MudIconButton Icon="@Icons.Material.Filled.Download" Color="Color.Secondary" Size="Size.Small" aria-label="Export to CSV" OnClick="DownloadFileFromStream">@TextDisplay</MudIconButton>
C# banner
C#Join
We are a programming server aimed at coders discussing everything related to C# (CSharp) and .NET.
61,871Members
Resources
Was this page helpful?

Similar Threads

Recent Announcements

Similar Threads

❔ WPF System.ObjectDisposedException: 'Cannot access a closed Stream.'
C#CC# / help
3y ago
ObjectDisposedException: Cannot access a closed Stream. I don't understand why it doesn't work.
C#CC# / help
2y ago
Blazor Server
C#CC# / help
2y ago
Hosting Blazor Server
C#CC# / help
14mo ago