Blazor IBrowserFile OpenReadStream() 阻塞 UI 线程

问题描述 投票:0回答:1

我正在尝试创建一个功能,使用户能够上传大文件(最多 5GB)。

从技术上讲,与此问题无关,但我通过分段上传将它们上传到 s3 [我已经尝试过低级 API 和高级 API,但存在同样的问题]。

我的假设是 OpenReadStream() 正在阻塞 UI 线程,该线程不允许 Invoke(StateHasChanged) 更新状态,从而更新进度条状态。整个上传完成后进度条更新为100。

尝试将阅读逻辑保留在单独的任务中,但没有帮助

我尝试在删除 s3 逻辑和其他不必要的问题复制内容后创建一个小提琴

Playground 上的复制(不包含 s3 逻辑 -> 创建的每个块都将上传到 s3,但每次迭代后进度不会在 UI 上更新):https://blazorrepl.telerik.com/ceEPmiFO42DzRtyS17

c# .net blazor blazor-server-side memorystream
1个回答
0
投票

如果这对其他人有帮助,我发现这很困难,因为 UI 状态不会更新,@HH 的答案对 WebAssembly 有点帮助,就像在 https://blazorrepl.telerik.com/cIYPmZOM55C9v6M338 (你可以检查日志) 但 它不能解决 Blazor 服务器上的问题,因为一旦您从文件打开流,数据就会开始从客户端流向服务器,如果文件足够大,它会挂起所有内容并排除上传的好处直接从客户端以多部分方式发送到 s3,因为首先将文件从客户端发送到服务器会产生额外的开销,然后进行处理。

解决方案: 我将研究基于 Javascript 的解决方案,从 AWS Secrets Manager 获取机密以确保客户端安全以及 S3AuthSigner 等高级身份验证机制。 不妨在 Blazor 中使用 npm 包和一些外部实用程序。

© www.soinside.com 2019 - 2024. All rights reserved.