file - Phonegap/Cordova 3.6 - 通过 blob 下载文件 :file

标签 file cordova blob phonegap-build

我们有一个使用 Phonegap 3.6.3 的应用程序,并使用 Phonegap build 构建。 作为此应用程序的一部分,我们需要将文件下载到用户的设备上。该文件可能是 .pdf、图像或任何二进制文件。

我们希望在应用程序中通过 blob:file 链接下载文件,而不是使用 file-transfer 等插件。

该文件是从 Base64 数据转换而来的,并创建了一个 Blob 对象。 objectURL 通过 window.URL.createObjectURL() 生成,并将其添加到 a 元素的 href 属性中。

DOM 包含以下内容

<a href="blob:file%3A///cf2e336c-8c10-4e54-9e99-26f7d5a0115f" download="1.jpg" style="display: none;"></a>

在桌面上,这可以正常工作,但在与 cordova 3.6.3 一起打包的应用程序中,它只是默默地失败。

我怀疑这与 cordova 中的白名单功能有关。 在问题中https://stackoverflow.com/a/31945728/250787其他人已经使用 cordova-plugin-whitelist 解决了同样的问题。 不幸的是,这个插件仅适用于 cordova 4.0+

我尝试使用访问源元素,但所有语句似乎都没有效果

<access origin="blob:*" launch-external="yes" />
<access origin="blob:*"/>

我已经有一个访问源来限制应用程序主后端系统的流量

<access origin="https://mobilbackend.mycompany.com/*"/>

如何解决这个问题?

最佳答案

好的。 blob:需要对 whitelist 进行特殊添加系统,您似乎对其了解不完全_或者_正在使用过时的文档。我可以这么说,因为 launch-external="yes"已停止使用。

请注意,这样做会使您的应用程序不安全。保护您的应用程序的安全取决于您。
将此添加到您的 config.xml

<plugin name="cordova-plugin-whitelist" source="npm" spec="1.1.0" />
<allow-navigation href="*" />
<allow-intent href="*" />
<access origin="*" /> <!-- Required for iOS9 -->

请注意,您的应用程序现在不安全。保护您的应用程序的安全取决于您。 将以下内容添加到您的 index.html以及每个.html页。

<meta http-equiv="Content-Security-Policy" 
         content="default-src * blob:; 
                  style-src * 'self' 'unsafe-inline' 'unsafe-eval'; 
                  script-src * 'self' 'unsafe-inline' 'unsafe-eval';">

我已添加blob:进入CSP定义。然而,这只是打开应用程序以允许 blob:网址。我仍然不清楚当你说“下载文件”时你的意思,如 blob:不是传输协议(protocol)。它只是为了定义 type of file .

我还建议阅读此文 whitelist worksheet ,请务必阅读9. CSP (Content Security Policy) 最后,如果您想继续讨论,请继续Google Groups

关于file - Phonegap/Cordova 3.6 - 通过 blob 下载文件 :file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34356724/

相关文章:

c - 是否有一个简单的库(适用于多个平台)可以轻松地将数组数据写入文件?

c# - 从文本文件读取并返回数据(C#)

jquery - 加载内部页面时显示加载消息

ios - Cordova 推送通知角标(Badge)未显示在应用程序图标 iOS 上

javascript - 为什么要将 blob 下载链接附加到文档正文?

image - react native /Realm : how to store an image in the database?

c - 如何使用 strtok 将由空格分隔的单词放入 C 中的 char 数组中?

android - cordova 检测应用程序是否从 Google Play 下载

azure - Pyspark Azure Blob 存储 - 未找到类 org.apache.hadoop.fs.azure.NativeAzureFileSystem

c++ - Opencv Blob 检测和矢量化