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

时间:2015-10-12 08:50:04

标签: android ios cordova download file-transfer

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

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

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

有没有办法在所有设备上公开提供目录路径?

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

修改

我想我应该描述一下我的用例,以便更清楚我想要实现的目标:我想使用相应的默认应用程序(应用程序聊天)打开文件Cordova File Opener plugin只接受来自本地文件系统的文件,所以我需要先保存它们。但是之后他们不一定需要从我的应用程序外部访问...

1 个答案:

答案 0 :(得分:15)

在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部分,其中说明了:

  

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