【问题标题】:Cordova - read/write access to shared folder in Win10Cordova - 对 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。看起来我只有对应用文件夹/沙盒的读/写访问权限。

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

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

【问题讨论】:

    标签: cordova uwp cordova-win10


    【解决方案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 manifest文件中声明fileTypeAssociation,如上述代码所示。详情请参考KnownFolders的documentLibrary的Prerequisites。

    2. 手动添加插件(将插件文件夹包含在你的项目中,添加到config.xml)。并且请不要通过VSconfig.xml设计器添加此插件,否则会出现xml解析错误,插件将无法添加成功。

      </widget>
           ...
          <plugin name="cordova-plugin-capability-manager" spec="~0.0.1"  />
      </widget>
      
    3. 直接在你的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
    猜你喜欢
    • 2022-01-01
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 2011-06-07
    • 2016-07-31
    相关资源
    最近更新 更多