aspnetcore
aspnetcore copied to clipboard
47685 stream to blob
Add blob() method to JS side of Blazor DotNetStreamReference
- [X] You've read the Contributor Guide and Code of Conduct.
- [ ] You've included unit or integration tests for your change, where applicable.
- [X] You've included inline docs for your change, where applicable.
- [X] There's an open issue for the PR that you are making. If you'd like to propose a new feature or change, please open an issue to discuss the change or find an existing issue.
Added method readableStreamToBlob() which returns a Blob from the given stream.
Description
The readableStreamToBlob method is an asynchronous function defined on the internal DotNetStream class. Its purpose is to convert a JavaScript ReadableStream (typically received from .NET interop) into a Blob URL that can be used in browser APIs (such as for downloads or displaying media).
Step-by-step Description
Obtain a Stream Reader:
The function first awaits the result of this.stream(), which returns a ReadableStream. It then calls .getReader() on this stream to obtain a reader for consuming the stream's data chunks.
Read All Chunks:
It initializes an empty array called chunks. Using a while (true) loop, it repeatedly calls reader.read(), which returns a promise resolving to an object with { done, value }.
If done is true, the stream has ended and the loop breaks. Otherwise, it pushes the value (a chunk of data, typically a [Uint8Array]) into the [chunks] array.
Create a Blob:
After reading all chunks, it creates a new [Blob] from the collected [chunks] array. The mimeType parameter (defaulting to "application/octet-stream") is used as the Blob's type.
Create a Blob URL:
It then calls URL.createObjectURL(blob) to generate a temporary URL representing the Blob's data in memory.
Return the URL:
The function returns this Blob URL as a string. This URL can be used in browser contexts to reference the streamed data (for example, as a download link or image source).
Fixes #47685
@dotnet-policy-service agree
@MaxxBahr could the same be achieved from user code ?
The issue speaks about not loading the whole (video) stream into memory at the same time. This PR does load it all.
@pavelsavara : The design details for the blob() method are outlined in the related design proposal #61826.
Commenter does not have sufficient privileges for PR 62298 in repo dotnet/aspnetcore
/azp run
Commenter does not have sufficient privileges for PR 62298 in repo dotnet/aspnetcore
For starters, there need to be E2E tests for this.