.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
相关产品推荐
相关产品推荐

