Cordova - 对 Win10 中的共享文件夹进行读/写访问
Posted
技术标签:
【中文标题】Cordova - 对 Win10 中的共享文件夹进行读/写访问【英文标题】:Cordova - read/write access to shared folder in Win10 【发布时间】:2017-11-22 08:54:42 【问题描述】:在工作中,我们有一个在 android 上运行的现有 Cordova 应用程序。在导入/导出数据时,我们执行以下流程:
数据从我们的桌面应用程序导出到 sqlite 数据库中 将 sqlite 数据库从主机 PC 复制到 Android 设备(使用sdcard
)
Cordova 应用程序离线/在线,用于更新 sqlite 数据库
当用户完成 Cordova 应用程序(并返回基础)后,sqlite 文件将复制回主机
桌面应用程序用于从 sqlite 数据库导入更新的数据
我目前正在将 Cordova 应用程序移植到 Windows UWP(特别是 Windows 10)。有没有办法使用文件系统实现上述目标?最初,我认为可以将文件复制到“文档”下的文件夹中,并且允许应用程序读取/写入此内容。
但是,当我检查window.requestFileSystem
返回的对象时,它有两个属性root
和winpath
。看起来我只有对应用文件夹/沙盒的读/写访问权限。
这可以做到吗,还是我必须开始考虑基于网络的选项?我们的客户更喜欢基于文件的解决方案。他们不希望转向基于网络的解决方案。
有没有办法将文件上传/下载到设备上的共享位置?
【问题讨论】:
【参考方案1】:有没有办法将文件上传/下载到设备上的共享位置?
是的,有一种方法可以将文件上传/下载到设备上的共享位置,但File Plugin
不行。文件插件可以访问的目录请参考Where to Store Files。
对于音乐、图片或文档等库,您可以按照以下步骤访问该文件夹:
创建一个自定义插件(cordova-plugin-capability-manager
)来管理windows平台上的功能(下面是plugin.xml):
<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
id="cordova-plugin-capability-manager" version="0.0.1">
<name>Capability Manager</name>
<description>Cordova Capability Manager Plugin</description>
<license>Apache 2.0</license>
<keywords>cordova,device</keywords>
<platform name="windows">
<config-file target="package.appxmanifest" parent="/Package/Capabilities">
<uap:Capability Name="documentsLibrary" />
<uap:Capability Name="picturesLibrary" />
<uap:Capability Name="musicLibrary" />
</config-file>
<config-file target="package.appxmanifest" parent="/Package/Applications/Application/Extensions" >
<uap:Extension Category="windows.fileTypeAssociation">
<uap:FileTypeAssociation Name="text">
<uap:SupportedFileTypes>
<uap:FileType>.txt</uap:FileType>
</uap:SupportedFileTypes>
</uap:FileTypeAssociation>
</uap:Extension>
</config-file>
</platform>
</plugin>
注意:如果你想使用documentLibrary
,你需要在windows manifest文件中声明fileTypeAssociation,如上述代码所示。详情请参考KnownFolders的documentLibrary的Prerequisites。
手动添加插件(将插件文件夹包含在你的项目中,添加到config.xml
)。并且请不要通过VSconfig.xml
设计器添加此插件,否则会出现xml解析错误,插件将无法添加成功。:
</widget>
...
<plugin name="cordova-plugin-capability-manager" spec="~0.0.1" />
</widget>
直接在你的cordova js文件中使用WinRTKnownFolders API:
if (cordova.platformId === "windows")
Windows.Storage.KnownFolders.documentsLibrary
.createFileAsync("abc.txt", Windows.Storage.CreationCollisionOption.replaceExisting)
.then(function (file)
var abc = file;
, function (error)
var cba = error;
);
【讨论】:
谢谢。您是说,本质上,我可以使用此代码在 Documents 和 app 文件夹之间复制文件。然后我可以在 app 文件夹中完成所有工作并使用cordova-plugin-file
和 cordova-sqlite-storage
以上是关于Cordova - 对 Win10 中的共享文件夹进行读/写访问的主要内容,如果未能解决你的问题,请参考以下文章
使用 Cordova 尝试加载 Flash 的 Win 10 通用应用程序