File_Picker 插件不返回 Flutter 中写入文件的绝对路径
Posted
技术标签:
【中文标题】File_Picker 插件不返回 Flutter 中写入文件的绝对路径【英文标题】:File_Picker plugin doesn't return absolute path for write file in Flutter 【发布时间】:2021-06-07 00:36:15 【问题描述】:我正在使用 file_picker 插件从我的颤振应用程序的设备存储中挑选文件。我需要一个绝对路径,以便我可以读/写文件。但是使用 file_picker 插件选择文件只返回存储在应用程序缓存中的复制文件的路径(文件加载和缓存在:/data/user/0/com.example.file_locker/cache/file_picker/Screenshot_2021-03-09 -00-59-58-834_com.linkedin.android.jpg )。
我正在使用 file_picker: ^2.1.6。
file_picker 存储库问题here。
现在,是否有任何解决方案可以从 file_picker 获取绝对路径,以便我可以读取/写入文件? 我被困在我的项目上,您的解决方案将不胜感激。
我见过其他文件资源管理器插件,如果您知道其他返回所需解决方案的其他插件,它们也采用相同的方式,请告诉我。
提前谢谢你。
【问题讨论】:
你试过pub.dev/packages/flutter_absolute_path吗? 【参考方案1】:pickFile 的路径在插件页面示例中的 path 属性中作为 state 可用:
FilePickerResult result = await FilePicker.platform.pickFiles();
if(result != null)
PlatformFile file = result.files.first;
print(file.name);
print(file.bytes);
print(file.size);
print(file.extension);
print(file.path);
如果您的目标是将 pickFile 写入应用程序文档目录或临时目录中的文件,您可以使用 path_provider:https://pub.dev/packages/path_provider
// Get the application document directory
Directory appDocDir = await getApplicationDocumentsDirectory();
// Get the absolute path
String appDocPath = appDocDir.path;
// Copy it to the new file
final File newFile = await file.copy('$appDocPath/your_file_name.$file.extension');
【讨论】:
我的目标是选择文件并复制它们的路径,然后将它们从设备存储的当前位置删除。根据您的建议,我可以为副本执行此操作,但我也有必要将其从原始位置删除。您能否提供任何解决方案来实现这一目标? @Arnaud 我不是 100% 确定,但我认为你不能这样做,你只能在应用程序文件夹中写入/删除 是的!我们可以在我们的应用程序文件夹中执行此操作。我希望有其他方法可以解决我的问题。顺便说一句,谢谢您的回复。【参考方案2】:await FilePicker.platform.getDirectoryPath();
【讨论】:
【参考方案3】:我也遇到过这个问题,问题是新版本的file_picker没有提供绝对路径。您可以使用旧版本的 file_picker 包。这工作正常,并通过使用函数为您提供绝对路径:
FilePicker.getMultiFilePath();
FilePicker.getFilePath();
(谷歌这些以获得更多信息。)
您需要在 Flutter 中禁用 null 安全性才能使用这些较低版本的包。
【讨论】:
以上是关于File_Picker 插件不返回 Flutter 中写入文件的绝对路径的主要内容,如果未能解决你的问题,请参考以下文章
Flutter file_picker 包为所有文件详细信息提供空值
pod install 错误:给定 podspec 'file_picker' 的名称与预期的 'gx_file_picker' 不匹配