Blazor应用在三星折叠屏Android设备上图片上传失败排查
排查Blazor应用三星折叠屏图片上传NotReadableError问题
核心问题定位
报错NotReadableError本质是浏览器端无法读取选中的文件流,通常和文件权限、文件引用生命周期、折叠屏设备的特殊文件处理逻辑有关。结合你的代码与场景,从以下方向逐步排查:
1. 提前缓存文件到本地内存,规避远程流权限丢失
你当前在ScaleImageWithThumbnail中才将远程流复制到MemoryStream,但Blazor Server的RemoteJSDataStream依赖浏览器端的文件引用——折叠屏设备可能因状态切换(如屏幕折叠/展开)、系统权限回收,导致浏览器提前释放文件引用。
优化代码:在获取IBrowserFile后立即将文件内容读到本地内存流,再传入后续处理:
private async Task SelectFiles(InputFileChangeEventArgs e) { _hasExceededFileLimit = false; try { _files = e.GetMultipleFiles(5).ToList(); foreach (var file in _files) { try { var placeholder = ImageAttachmentModel.Create(Model.BillId, file.Name, file.ContentType, file.Size); Model.Attachments.Add(placeholder); // 立即读取文件到本地内存流,避免远程流权限失效 using var memoryStream = new MemoryStream(); await using (var fileStream = file.OpenReadStream(100000000L)) { await fileStream.CopyToAsync(memoryStream); } memoryStream.Seek(0, SeekOrigin.Begin); // 使用本地内存流执行后续命令 var response = await Mediator.Send(new ProcessAndUploadCommand( Model.BillId, ImageDataModel.Create(file.Name, file.ContentType, file.Size, memoryStream), Options.Value.AttachmentMaxImageWidth)); placeholder.Update(response); } // ... snip ... } } // ... snip ... }
2. 排查折叠屏的文件选择场景特殊性
三星折叠屏的系统逻辑可能带来特殊限制:
- 屏幕折叠/展开时,浏览器进程可能被后台回收或重建,导致临时文件权限丢失
- 系统对SD卡、私有相册等目录的权限管控更严格
验证步骤:
- 让用户测试不同来源的图片:相机拍摄照、下载目录文件、系统相册文件,确认是否某类文件必现错误
- 分别在折叠、展开状态下测试上传,确认是否状态切换触发问题
3. 规范文件流的生命周期与超时管理
Blazor的IBrowserFile.OpenReadStream()返回的流依赖浏览器端资源,若后续处理(图片缩放、网络传输)耗时过长,可能导致浏览器主动释放引用。
优化点:
- 添加超时取消令牌,避免无限制等待:
using var cts = new CancellationTokenSource(TimeSpan.FromMinutes(2)); // 设置2分钟超时 await using (var fileStream = file.OpenReadStream(100000000L, cts.Token)) { // ... 处理逻辑 }
- 确保
ImageDataModel不会长期持有RemoteJSDataStream引用,读取完成后及时释放
4. 验证浏览器适配问题
同款Edge浏览器在折叠屏设备上可能存在API差异:
- 确认用户的Edge版本,建议更新至最新版后重试
- 测试Chrome等其他浏览器在同款折叠屏的上传情况,排除Blazor框架本身的问题
5. 补充细粒度日志,定位失败环节
在现有日志基础上添加关键节点日志:
- 在
SelectFiles中记录文件大小、ContentType,尝试通过浏览器API获取文件来源(注意隐私限制) - 在
ScaleImageWithThumbnail中记录inputData的类型、可读状态,以及CopyToAsync的执行进度,确认错误触发的具体环节
内容的提问来源于stack exchange,提问作者Killnine
相关产品推荐
相关产品推荐

