You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI中如何通过用户选择的Android Uri读写文件流?

在MAUI中通过Android Uri写入文件的问题与解决办法

我在MAUI中实现了SaveFileAsync方法,需要将Stream中的文件内容写入用户选择的文件。按照Android文件选择流程获取到Java Uri后,尝试用以下代码写入时失败:

public partial async Task SaveFileAsync(string name, Stream stream)
{
    const int SaveFileCode = 300;

    var intent = new Intent(Intent.ActionCreateDocument);
    intent.AddCategory(Intent.CategoryOpenable);
    intent.SetType("application/pdf");
    intent.PutExtra(Intent.ExtraTitle, name);

    var (resCode, data) = await ActivityResultService.Instance.StartActivityForResultAsync(intent, SaveFileCode);
    if (resCode != Android.App.Result.Ok || data is null) { return; }

    var path = data.Data?.Path;
    ArgumentNullException.ThrowIfNull(path);

    using var outStream = new FileStream(path, FileMode.Create);
    await stream.CopyToAsync(outStream);
}

抛出异常:

Could not find a part of the path '/document/raw:/storage/emulated/0/Download/test.pdf'.

目前只能用Java API临时替代,想问有没有办法通过Android Uri创建Stream来完成文件读写?


可行解决方案:使用ContentResolver的OpenOutputStream

通过Android的ContentResolver.OpenOutputStream方法可以直接通过Uri获取输出流,完成写入操作,代码如下:

public partial async Task SaveFileAsync(string name, Stream stream)
{
    const int SaveFileCode = 300;

    var intent = new Intent(Intent.ActionCreateDocument);
    intent.AddCategory(Intent.CategoryOpenable);
    intent.SetType("application/pdf");
    intent.PutExtra(Intent.ExtraTitle, name);

    var (resCode, data) = await ActivityResultService.Instance.StartActivityForResultAsync(intent, SaveFileCode);
    if (resCode != Android.App.Result.Ok || data is null) { return; }

    var uri = data.Data;
    ArgumentNullException.ThrowIfNull(uri);

    var activity = Platform.CurrentActivity;
    ArgumentNullException.ThrowIfNull(activity?.ContentResolver);

    using var outStream = activity.ContentResolver.OpenOutputStream(uri);
    ArgumentNullException.ThrowIfNull(outStream);

    await stream.CopyToAsync(outStream);
}

内容的提问来源于stack exchange,提问作者Luke Vo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 09:46:39