繁体   English   中英

使用Cordova FileTransfer将文件保存到公共目录

[英]Save file to public directory using Cordova FileTransfer

我需要在移动设备上下载文件,并使其他应用(使用Android和iOS)可以访问这些文件。

我设法将文件下载到SD卡( cordova.file.externalDataDirectory ),但这仅存在于Android上,即使那样,我也不能依赖所有具有SD卡的设备。

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

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

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

编辑:

我想我应该描述用例,以便更清楚地实现自己的目标:我想使用各自的默认应用(pdf查看器,图像查看器等)从应用内聊天中打开文件。 因为Cordova File Opener插件仅接受本地文件系统中的文件,所以我需要先保存它们。 但是之后不一定需要可以从我的应用程序外部对其进行访问...

在Android上,外部存储目录始终存在; 如果设备没有物理SD卡,则Android将对其进行仿真。 请参阅getExternalStorageDirectory

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

因此, cordova.file.externalDataDirectory将始终解析。 但是,要在应用程序之间共享数据,您可能要使用cordova.file.externalRootDirectory外部存储(SD卡)根目录。 请参阅cordova-plugin-file

这样,您可以将文件存储在易于从其他应用程序访问的位置,例如/sdcard/my_shared_data/

在iOS上,共享文件更加困难,因为由于安全策略的缘故,有意将应用程序彼此隔离,如Apple的《 应用程序间通信指南 》所述:

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

您最好在iOS上通过iCloud同步数据来共享数据。 请参阅《 iCloud设计指南》中的“ 为多个应用程序配置通用遍历容器 ”部分,其中说:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM