【问题标题】:Save file to public directory using Cordova FileTransfer使用 Cordova FileTransfer 将文件保存到公共目录
【发布时间】:2016-01-09 16:22:01
【问题描述】:

我需要在我的移动设备上下载文件并使其可供其他应用程序访问(使用 Android 和 iOS)。

我设法将文件下载到 SD 卡 (cordova.file.externalDataDirectory),但这仅存在于 Android 上,即便如此,我也不能依赖每个设备都有 SD 卡。 p>

当我下载到设备存储 (cordova.file.dataDirectory) 时,该文件是我的应用程序私有的,因此其他应用程序无法访问。该文件可以在 InAppBrowser 中打开,但我更喜欢使用各自的默认应用。

有没有办法在所有设备上获取公开目录的路径?

https://stackoverflow.com/a/21375812/3432305 中建议的解决方案返回的路径在 Android 上都是私有的...

编辑:

我想我应该描述我的用例,以便更清楚我想要实现的目标:我想使用相应的默认应用(pdf 查看器、图像查看器)从我的 in app chat 打开文件等等。)。因为Cordova File Opener plugin 只接受来自本地文件系统的文件,所以我需要先保存它们。但之后不一定需要从我的应用程序外部访问它们......

【问题讨论】:

    标签: android ios cordova download file-transfer


    【解决方案1】:

    在 Android 上,外部存储目录始终存在;如果设备没有物理 SD 卡,Android 将模拟它。见getExternalStorageDirectory

    注意:不要被这里的“外部”一词所迷惑。这个目录 最好将其视为媒体/共享存储。它是一个文件系统 可以容纳相对大量的数据,并且可以共享 所有应用程序(不强制执行权限)。传统上这是 SD 卡,但它也可以作为内置存储实现 不同于受保护的内部存储的设备,并且可以 作为文件系统安装在计算机上。

    因此cordova.file.externalDataDirectory 将始终解决。但是,对于在应用程序之间共享数据,您可能希望使用cordova.file.externalRootDirectory - 外部存储(SD 卡)根。见cordova-plugin-file

    通过这种方式,您可以将文件存储在更容易从其他应用访问的位置,例如/sdcard/my_shared_data/

    在 iOS 上,共享文件更加困难,因为由于安全策略,应用程序被故意相互隔离,正如 Apple 的 Inter-App Communication Guide 所说:

    应用仅与设备上的其他应用间接通信

    在 iOS 上最好的办法是通过 iCloud 同步数据来共享数据。请参阅 iCloud 设计指南中的 Configuring a Common Ubiquity Container for Multiple Apps 部分,其中说:

    ...也许您提供了两个互操作且需要的应用程序 访问彼此的文件。在这两个示例中,您都获得 通过指定一个通用的普遍存在的容器,然后 请求从每个应用程序访问它。

    【讨论】:

    • 您好,谢谢您的回答!这至少解决了我的 Android 问题 :) 我编辑了我的问题以进一步描述我的问题。您能否检查一下这是否会改变 iOS 的任何内容?关于iCloud,你提供的链接说不要在那里存储“缓存、临时或大型下载的数据文件”,所以我宁愿不使用它......另外,我正在开发一个混合应用程序,所以我有点仅限于 Cordova 插件提供的选项.. 但我觉得这是一个非常常见的用例,所以 iOS 也应该有一个简单的解决方案..
    • 在默认应用程序中打开文件与在特定应用程序之间共享文件完全不同,而且更容易。 cordova-plugin-file-opener2 将完全满足您对 iOS 和 Android 的需求。只需按照示例了解每个平台的文件保存位置,如果您有问题,请在插件 Github 页面上发布问题。
    • 我也觉得这应该是一件容易的事。但是,我找不到iOS的好例子。我现在再次尝试使用cordova.file.applicationStorageDirectory,它似乎可以工作(尽管文档说它是只读的......)。稍后将使用cordova.file.cacheDirectory 再次尝试,但我想应该没问题。谢谢!
    • @kolli 您好,有关于 iO 的反馈吗?我遇到了同样的问题。我正在为 Android 使用 externalRootDirectory,但对于 iOs 没有任何线索...谢谢!
    • @michaelbn 是的,操作系统可以随时擦除缓存目录
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    相关资源
    最近更新 更多