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

Android 10下使用FilePicker报“Input string was not in a correct format”错误求助

解决CrossFilePicker在Android 10上的“Input string was not in a correct format”异常

你遇到的这个异常,本质是旧版本的Plugin.FilePicker没有适配Android 10引入的Scoped Storage机制,导致解析文件URI时出现了整数格式转换错误。具体来说,插件内置的IOUtil.GetPath方法尝试把URI中的某段字符串解析成Int64,但这段字符串并非有效数字,最终抛出了格式异常。

下面是几个可行的解决方案:

1. 升级到最新版FilePicker插件

旧版本插件对Android 10+的URI处理存在bug,优先尝试升级到最新稳定版:

  • 在NuGet包管理器中搜索Plugin.FilePicker,直接更新到最新版本
  • 或者通过命令行安装:
    Install-Package Plugin.FilePicker -Version <最新版本号>
    

新版本已经修复了Scoped Storage环境下的URI解析问题,大部分情况升级后就能解决异常。

2. 启用Legacy Storage兼容(临时过渡方案)

如果暂时不想升级插件,或者升级后仍有问题,可以在AndroidManifest.xml中添加属性,让App在Android 10上绕过Scoped Storage限制,使用旧的文件访问逻辑:

<application 
    android:requestLegacyExternalStorage="true"
    ...>
    ...
</application>

注意:这个方案在Android 11及以上系统中会被忽略,长期来看还是建议升级插件适配Scoped Storage。

3. 手动处理文件流(绕过路径解析)

如果上述方案都不适用,可以直接通过插件提供的文件流操作文件,完全绕过路径解析逻辑:

FileData fileData = await CrossFilePicker.Current.PickFile();
if (fileData != null)
{
    // 直接使用文件流,不依赖路径
    using (var sourceStream = fileData.GetStream())
    {
        // 将文件复制到App私有目录,方便后续操作
        var targetFilePath = Path.Combine(
            Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), 
            fileData.FileName
        );
        using (var targetStream = File.Create(targetFilePath))
        {
            await sourceStream.CopyToAsync(targetStream);
        }
        // 后续直接使用targetFilePath即可
    }
}

这种方式从根源上避免了URI解析的问题,也符合Android 10+的存储规范。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:01:09