c# - Blazor UI 在内存文件上传期间挂起
问题描述
我正在开发一个简单的 blazor 应用程序,它接收文件上传并存储它。我正在使用 BlazorInputFile,但我无法弄清楚为什么将流复制到 MemoryStream 会导致浏览器冻结。
此博客文章中解释了如何使用(以及如何实现)BlazorInputFile的详细信息:在 Blazor 中上传文件。
var ms = new MemoryStream();
await file.Data.CopyToAsync(ms); // With a 1MB file, this line took 3 seconds, and froze the browser
status = $"Finished loading {file.Size} bytes from {file.Name}";
示例项目/repo:https://github.com/paulallington/BlazorInputFileIssue (这只是默认的 Blazor 应用程序,BlazorInputFile 按照文章实现)
解决方案
我遇到过同样的问题。我已经尝试了两个预定义组件,例如 Steve Sanderssons 文件上传和 MatBlazor 文件上传,以及我自己的处理文件上传的组件。小文件不是问题。一旦文件变大一点,UI 就会自行挂起。MemoryOutOfBoundsException(或类似的)。所以不,async/await 不能帮助你释放 UI。我在这个问题上付出了很多努力,我目前正在使用的一种解决方案是使用 javascript 而不是 blazor 进行所有文件上传。只需使用 javascript 获取文件并将其发布到服务器。没有 JSInterop。但是,这似乎是 webassembly 单声道中的内存问题。在此处阅读更多信息:https ://github.com/dotnet/aspnetcore/issues/15777
注意:我还没有在最新的 Blazor 版本上尝试过这个。所以我不确定它是否已修复。
推荐阅读
- ruby-on-rails - 在没有更改任何字段的 Rails 应用程序中防止更新记录
- python - 需要用ajax调用实现django-filter
- android - 使用 LiveData 在 ImageView 上使用 DataBinding 时出现 IllegalArgumentException
- python - 我从 get 方法中获取空白值
- asp.net-mvc - Microsoft Azure - 性能测试总是以失败/异常结束
- .net - 如何从 Azure Devops 在 60 个 AWS 服务器上部署代码
- docker - 如何从 docker hub 获取开放自由映像的稳定版本?
- sql - 是否有任何 SQL 查询或 OIM API 在禁用用户时输入理由?
- java - logback.xml 中的日志名称问题
- go - 如何在go中从jwk生成pem