当前位置: 首页 > 知识库问答 >
问题:

Cordova/PhoneGap打开下载文件(InAppBrowser)

茹照
2023-03-14

使用Cordova/PhoneGap 3.3.0,我使用FileTransfer插件下载一个文件,然后尝试使用InAppBrowser插件打开它。我可以成功下载该文件,并将其放置在临时目录中。由于文件插件现在使用URL模式,我无法确定如何将正确的URL/路径传递到<code>窗口。打开InAppBrowser插件的方法。我也找不到任何相关文件。我能找到的所有“下载并打开”文档都是过时的,并且是URL模式之前的。

相关链接:

    < li >关于新插件版本的Cordova发布信息 < li >文件传输插件的自述文件 < Li > InAppBrowser插件的自述文件 < li >如何使用InAppBrowser打开本地文件,以及文件插件中URL方案的最新更改-类似问题

我发现的过时示例:

    < Li > Cordova 3.1上的文件传输下载文件问题-该用户降级到早期版本,因为他们无法解决该问题 < Li > https://gist . github . com/dev geeks/4982983-此示例使用了< code>entry.fullPath,但现在已被弃用,取而代之的是< code>toURL()

这是我的代码:

var uri = encodeURI("http://some.url/file.pdf");
window.requestFileSystem(LocalFileSystem.TEMPORARY, 0,
    function (fileSystem) {
        var fileTransfer = new FileTransfer();
        var filename = fileSystem.root.toURL() + uri.substr(uri.lastIndexOf("/") + 1);
        fileTransfer.download(uri, filename,
            function(entry) { // download success
                var path = entry.toURL(); //**THIS IS WHAT I NEED**
                window.open(path, "_system");
            },
            function(error) {} // irrelevant download error
        );
    },
    function(error) {} // irrelevant request fileSystem error
);

我目前正在Android上测试Nexus 7和Nexus 5。iApp浏览器正确打开默认pdf启动器(在我的情况下是Adobe Reader),但随后我收到“文档路径无效”错误。

[更新:显示返回值]

我已经尝试了文件路径的以下所有组合:

var path = entry.toURL(); // "cdvfile://localhost/temporary/file.pdf"
var path = entry.fullPath; // "file.pdf"
var path = fileSystem.root.toURL() + filename; // "cdvfile://localhost/temporary/file.pdf"
var path = fileSystem.root.fullPath + filename; // "/file.pdf"

共有3个答案

马坚白
2023-03-14

最新的Cordova医生说

如果您要升级到File的新版本(1.0.0或更高版本),并且您以前一直使用entry.fullPath作为download()或upload()的参数,那么您将需要更改代码以使用文件系统URL。

文件条目。toURL()和DirectoryEntry。toURL()返回以下格式的文件系统URL:

cdvfile://localhost/persistent/path/to/file,可以在 download() 和 upload() 方法中代替绝对文件路径。

您可以尝试删除< code > cdvfile://localhost/persistent 以获得一个适用于您的window.open的url。(可以从一个警报或console.log开始,显示您使用< code>entry.toURL()得到的内容)

柯清野
2023-03-14

我想我有个解决办法,但有点恶心。

我浏览了cordova JAVA并查找了它构建文件条目JSON对象的位置。特别是通过查找将<code>完整路径

我为“fullAbsolutePath”添加了一个额外的条目,其值为< code>[file]。getAbsolutePath(),其中< code>[file]是附近的任何java.io.file实例。为了安全起见,我在所有我能找到的地方都这样做了,因为它似乎不会伤害任何东西。

然后我修改了FileEntry。js和文件。js来将该值填充到文件条目对象中。

仍然试图解决问题,但我相信我走在正确的轨道上......

我认为一个更好的解决方案是修改inAppBrowser插件以识别和解析cordovaFile://协议,我确信他们故意掩盖了绝对文件系统路径-但这可能有点超出我的能力。

编辑-是的!这有效!我现在可以获取一个文件条目,调用file方法,然后从fileObject读取fullSystemPath。值类似于我的android上的“/storage/emulated/0/whather/”。只需在“文件://”和窗口前加上前缀。open将接受它。

咸晨
2023-03-14

自Cordova 3.4以来,文件协议已经改变,现在不再使用完整路径,而是提供了返回cdvfile://path/to/your/file.ext路径

因此,当您使用文件系统对象的回调(带有entry参数)下载文件时,只需调用entry.toURL()并使用以下语句打开它——假设您安装了InApBrowser,并且_blank将打开inap browser的窗口:

window.open(entry.toURL(), '_blank', 'location=no,closebuttoncaption=Close,enableViewportScale=yes');  

我在我的博客上写了这篇文章(如果你想要所有的参考资料和背景信息)。

 类似资料:
  • 问题内容: 更新1: 这就是我最后所做的一切: 那不是必需的吗? 原始问题: 在我的Ubuntu 12.04计算机上,我刚刚使用npm和cordova安装了node.js: 当我尝试添加android时: 我得到以下输出: 有人知道为什么会发生这种情况以及如何解决吗? 我在PhoneGap上遇到了同样的问题。 问题答案: Android工具二进制文件可能不在您的路径中。 根据PhoneGap文档(

  • 我有一个使用远程索引页面的Android Phonegap/Cordova应用程序,该页面实现了html5缓存,因此该应用程序可以离线使用。一旦用户使用活动连接启动应用程序以最初填充缓存,这将非常有效,它可以无缝工作,并且在离线时感觉非常本机。 但是,我想优雅地处理离线时第一次启动它的人,即远程页面尚未被缓存时。目前它给出了一个未找到的页面。 我可以在重定向到远程页面之前检查是否有网络连接,但这意

  • 我在启动和运行phonegap windows phone应用程序时遇到问题。(PhoneGap 3.1.0-在windows 8计算机上) 我已经按照步骤操作,因此从“Windows Phone命令行工具”创建了一个Windows Phone应用程序。它说使用CordovaWP7xxx.zipCordovaWP8xxx.zip创建一个模板,您可以从中创建一个应用程序。在最新的3.1.0版本的电话

  • 问题内容: 我有一个生成PDF的动作类。该适当地设定。 我 通过Ajax调用来称呼它。我不知道将流传输到浏览器的方法。我尝试了几件事,但没有任何效果。 上面给出了错误: 您的浏览器发送了该服务器无法理解的请求。 问题答案: 您不必为此使用Ajax。只是一个环节是不够的,如果你设置到服务器端代码。这样,如果您最关心的是父页面将保持打开状态(为什么您会为此而不必要地选择Ajax?)。此外,没有办法很好

  • 问题内容: 我有一个生成PDF的动作类。该适当地设定。 我action 通过Ajax调用来称呼它。我不知道将流传输到浏览器的方法。我尝试了几件事,但没有任何效果。 上面给出了错误: 问题答案: 你不必为此使用Ajax。只是一个环节是不够的,如果你设置到服务器端代码。这样,如果你最关心的是父页面将保持打开状态(为什么你会为此而不必要地选择Ajax?)。此外,没有办法很好地同步处理这个问题。PDF不是

  • 我正试图用reactJS下载一个xlsx文件,但当我在下载后试图打开我的文件时,我收到了这条消息: “Excel无法打开文件‘file.xlsx’,因为文件格式或文件扩展名无效。请验证文件是否已损坏,以及文件扩展名是否与文件格式匹配。” 这是前端代码: 为什么我得到这个错误?请谁来帮帮我,我被困在这个3周 [编辑1] 我尝试下载的文件是在后端构建的,基本上我获取数据库上的值并使用Apache po