在工作中,我们有一个在Android上运行的现有Cordova应用程序。导入/导出数据时,我们实现以下过程:
sdcard
)我目前正在将Cordova应用移植到Windows UWP(特别是Windows 10)。有没有办法使用文件系统实现上述目的?最初,我认为可以将文件复制到" Documents"下面的文件夹中。并且应用程序将被允许读/写此内容。
但是,当我检查window.requestFileSystem
返回的对象时,它有2个属性root
和winpath
。看起来我只对app folder / sandbox有读/写权限。
可以这样做,还是我必须开始寻找基于网络的选项?我们的客户更喜欢基于文件的解决方案。转向基于网络的解决方案将是不可取的。
有没有办法将文件上传/下载到设备上的共享位置?
答案 0 :(得分: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清单文件中声明fileTypeAssociation,如上面的代码所示。有关详细信息,请参阅documentLibrary的KnownFolders的先决条件。
手动添加插件(将插件文件夹包含在项目中,将其添加到config.xml
)。并且请不要通过VS config.xml
设计器添加此插件,因为您将获得xml解析错误,并且插件无法成功添加。:
</widget>
...
<plugin name="cordova-plugin-capability-manager" spec="~0.0.1" />
</widget>
直接在您的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;
});
}