如果我有完整路径,如何使用 Filesystem.readFile

Posted

技术标签:

【中文标题】如果我有完整路径,如何使用 Filesystem.readFile【英文标题】:How to use Filesystem.readFile if I have a full path 【发布时间】:2020-03-13 18:21:42 【问题描述】:

在 Capacitor/Ionic/Angular 应用程序中,我试图允许用户拍摄视频,在 <video> 标记中查看它,并且我还需要能够在 POST 请求中发送视频数据,当用户提交。

我正在使用 Cordova 的 MediaCapture 插件获取视频,所以我返回的内容包含 fullPath 形式为 file://...

我坚持的一点实际上是从完整路径中获取一个 File/Blob 对象。

我尝试使用来自 Capacitor Plugins 的 Filesystem.readFile(),但问题是它需要 path: stringdirectory: FilesystemDirectory。如果我尝试只提供path: fullPath,我会收到“文件不存在”错误。 FilesystemDirectory 只是为我提供了几个选项可供选择,但我不想使用它,因为我已经有了完整路径并且不想检查我应该在哪个设备中使用哪个目录。

我还有其他方法可以解决这个问题吗?

【问题讨论】:

嘿,我也面临同样的问题?你解决了吗? 【参考方案1】:

使用Capacitor.convertFileSrc('file:///path/to/video.mp4');,然后您将拥有一个webview 可以理解的路径,您可以使用fetch/xhr 到该路径来获取Blob。 (请注意,在 ios 上,如果在实时重新加载模式下运行,它将无法工作,因为 iOS 会阻止从 http 方案(由实时重新加载服务器使用)到电容器方案(正常运行时的常规电容器方案)的请求

【讨论】:

我也面临同样的问题。我尝试了 Capacitor.convertFileSrc,它在实时重新加载时运行良好,但是当我构建生产 apk 时,它在使用 http.get() 获取时给了我 404 错误。如果我做错了什么,请告诉我。

以上是关于如果我有完整路径,如何使用 Filesystem.readFile的主要内容,如果未能解决你的问题,请参考以下文章

使用 filesystem::path,如何以跨平台方式打开文件?

可以使用 filesystem::canonical 来防止传递给 fstream 的文件路径的文件路径注入吗

检查 std::filesystem::path 是不是在目录中

如何获取给定文件夹中具有特定扩展名的文件列表?

使用 boost::filesystem::path 获取绝对路径

Java NIO路径:从完整路径获取基本路径?