Cordova - 对Win10中共享文件夹的读/写访问权限

时间:2017-06-20 01:37:40

标签: cordova uwp cordova-win10

在工作中,我们有一个在Android上运行的现有Cordova应用程序。导入/导出数据时,我们实现以下过程:

  • 数据从我们的桌面应用程序导出到sqlite数据库
  • 将sqlite数据库从主机PC复制到Android设备(使用sdcard
  • Cordova应用程序已离线/现场,用于更新sqlite数据库
  • 当用户完成Cordova应用程序(并返回基础)后,sqlite文件将被复制回主机
  • 桌面应用程序用于从sqlite数据库导入更新的数据

我目前正在将Cordova应用移植到Windows UWP(特别是Windows 10)。有没有办法使用文件系统实现上述目的?最初,我认为可以将文件复制到" Documents"下面的文件夹中。并且应用程序将被允许读/写此内容。

但是,当我检查window.requestFileSystem返回的对象时,它有2个属性rootwinpath。看起来我只对app folder / sandbox有读/写权限。

可以这样做,还是我必须开始寻找基于网络的选项?我们的客户更喜欢基于文件的解决方案。转向基于网络的解决方案将是不可取的。

有没有办法将文件上传/下载到设备上的共享位置?

1 个答案:

答案 0 :(得分:1)

  

有没有办法将文件上传/下载到设备上的共享位置?

是的,有一种方法可以将文件上传/下载到设备上的共享位置,但不能使用File Plugin。对于文件插件可以访问的目录,请参阅Where to Store Files

对于音乐,图片或文档等库,您可以按照以下步骤访问该文件夹:

  1. 创建一个自定义插件(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清单文件中声明fileTypeAssociation,如上面的代码所示。有关详细信息,请参阅documentLibrary的KnownFolders的先决条件。

  2. 手动添加插件(将插件文件夹包含在项目中,将其添加到config.xml)。并且请不要通过VS config.xml设计器添加此插件,因为您将获得xml解析错误,并且插件无法成功添加。

    </widget>
         ...
        <plugin name="cordova-plugin-capability-manager" spec="~0.0.1"  />
    </widget>
    
  3. 直接在您的cordova js文件中使用WinRT KnownFolders 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;
        });
    }