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

.NET MAUI Mac Catalyst平台如何获取拍摄图片的完整路径?

解决.NET MAUI中Mac Catalyst平台MediaPicker拍照后获取有效路径的问题

问题根源

Mac Catalyst平台下,MediaPicker.Default.CapturePhotoAsync()返回的FileResult对象的FullPath属性仅包含文件名(如[guid].png),无完整路径——这是因为拍摄的照片默认存储在系统临时目录,平台限制直接通过路径访问该文件,所以基于FullPath使用FileInfo.CopyTo会抛出异常。

正确实现方案

不要依赖FullPath属性,而是通过FileResult.OpenReadAsync()获取文件流,再将流写入到你可控的缓存文件夹中。这种方式跨平台通用,完全适配Mac Catalyst的限制。

示例代码

async Task SaveCapturedPhotoToCache()
{
    var result = await MediaPicker.Default.CapturePhotoAsync();
    if (result == null) return;

    // 获取应用专属的缓存文件夹路径
    var cacheDirectory = FileSystem.Current.CacheDirectory;
    // 生成目标文件路径,可保留原文件名或自定义命名
    var targetFilePath = Path.Combine(cacheDirectory, result.FileName);

    // 通过流完成文件复制,避开路径访问限制
    using var sourceStream = await result.OpenReadAsync();
    using var targetStream = File.OpenWrite(targetFilePath);
    
    await sourceStream.CopyToAsync(targetStream);

    // 此时targetFilePath即为可用的完整路径,可用于后续附加等操作
}

额外说明

  • 这种流操作是.NET MAUI官方推荐的跨平台文件处理方式,兼容所有支持的平台(Android、iOS、Windows、Mac Catalyst)。
  • 若需要自定义文件名,直接替换result.FileName为你需要的命名规则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:17:07