Uno WASM端DataWriter.StoreAsync()不可用,图片下载存储报错求解决方案
问题根因
你的判断是正确的,Uno Platform当前WASM目标下并未实现DataWriter(IOutputStream)构造方法,直接调用会触发未实现异常,后续的NullReferenceException是该构造调用失败返回空对象导致的,与你传入的imageArray参数无关。
可行替代方案
直接使用.NET标准的System.IO流API完成字节数组写入操作,该类API在Uno全平台都做了适配,不需要依赖未实现的UWP风格DataWriter接口。
修复后可运行代码
StorageFile imageFile = await SelectedFolder.CreateFileAsync($"{item.picturekey}.jpg", Overwrite ? CreationCollisionOption.ReplaceExisting : CreationCollisionOption.FailIfExists); if (imageFile != null) { byte[] imageArray = await DataService.GetImage(item.picturekey, item.hiresurl); if (imageArray?.Length > 0) { // 使用跨平台兼容的Stream API写入数据 using (var writeStream = await imageFile.OpenStreamForWriteAsync()) { writeStream.Seek(0, SeekOrigin.Begin); await writeStream.WriteAsync(imageArray.AsMemory(0, imageArray.Length)); await writeStream.FlushAsync(); } sb.AppendLine(this.DownloadStatus); } }
改动说明
- 替换原有的
OpenAsync+GetOutputStreamAt+DataWriter逻辑,改用OpenStreamForWriteAsync扩展方法直接获取.NET标准Stream实例 - 直接调用Stream的异步写入方法完成字节数组写入,逻辑更简洁,全平台兼容
- 移除了冗余的资源手动释放逻辑,通过using语法自动管理流的生命周期
附加说明
如果你需要将下载的图片直接触发浏览器的下载弹窗让用户保存到本地磁盘,可在写入完成后调用Uno封装的浏览器存储接口触发下载,上述代码已满足WASM沙箱内存储图片的需求。
内容的提问来源于stack exchange,提问作者Robotuner
相关产品推荐
相关产品推荐

