使用Cordova/PhoneGap 3.3.0,我使用FileTransfer插件下载一个文件,然后尝试使用InAppBrowser插件打开它。我可以成功下载该文件,并将其放置在临时目录中。由于文件插件现在使用URL模式,我无法确定如何将正确的URL/路径传递到<code>窗口。打开InAppBrowser插件的方法。我也找不到任何相关文件。我能找到的所有“下载并打开”文档都是过时的,并且是URL模式之前的。
相关链接:
我发现的过时示例:
这是我的代码:
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"
最新的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()得到的内容)
我想我有个解决办法,但有点恶心。
我浏览了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将接受它。
自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