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 返回的对象时,它有两个属性rootwinpath。看起来我只有对应用文件夹/沙盒的读/写访问权限。

这可以做到吗,还是我必须开始考虑基于网络的选项?我们的客户更喜欢基于文件的解决方案。他们不希望转向基于网络的解决方案。

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

【问题讨论】:

【参考方案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-filecordova-sqlite-storage

以上是关于Cordova - 对 Win10 中的共享文件夹进行读/写访问的主要内容,如果未能解决你的问题,请参考以下文章

使用 Cordova 尝试加载 Flash 的 Win 10 通用应用程序

win10共享文件夹无法访问怎么办

彻底解决win10win7局域网共享

Redhat6.5匿名访问win10共享文件夹.

win10与vmware 中的kali linux 共享文件夹

关于Centos7挂载Win10共享文件失败问题的解决