在 Phonegap 应用程序中使用文件传输插件
Posted
技术标签:
【中文标题】在 Phonegap 应用程序中使用文件传输插件【英文标题】:Using File Transfer Plugin in Phonegap Application 【发布时间】:2017-07-31 16:16:53 【问题描述】:我有超过 2 周的时间尝试使用文件传输插件在 phonegap 应用程序中下载文件 PDF,但没有成功!我为此做了一切: -安装最新版本的phonegap - 安装文件传输插件的最新版本 这是集成到 javascript 界面中的代码:
var fileTransfer = new FileTransfer();
fileTransfer.download(
"http://developer.android.com/assets/images/home/ics-android.png",
"file://sdcard/ics-android.png",
function(entry)
alert("download complete: " + entry.fullPath);
,
function(error)
alert("download error source " + error.source);
alert("download error target " + error.target);
alert("upload error code" + error.code);
);
但是好像错了!!!我喜欢在 android 设备中显示最后三个警报的结果: - 下载错误源 - 下载错误目标 - 上传错误代码 我该怎么办?!!
【问题讨论】:
你能写出你得到了什么错误代码吗? 当我访问应用程序时,它显示:“下载错误源[developer.android.com/assets/images/home/ics-android.png]”,然后显示“下载错误目标文件://sdcard/ics-android.png”,最后“上传错误代码”..我测试了很多网址,但问题仍然存在.. 【参考方案1】:请求您查看我的github page,其中包含一个示例 Cordova 应用程序,该应用程序从外部 URL 下载 PDF 文件并将其下载到设备。
此示例应用已在 ios 和 Android 设备上进行了测试。希望对您有所帮助。
【讨论】:
您的解决方案也很有趣,我对其进行了测试..最终它可以工作:它无需下载即可显示文件,这就足够了..作为一名工程师,您挽救了我的生命..非常感谢! @Hamza Belheni 实际上它会在本地下载文件然后显示它。完全检查代码。也很高兴它对你有所帮助 @Ghandi 我还有一个小问题,我需要你的帮助:如何在我的 webview(我开发的一个网站)中调用这些函数(在应用程序主体中定义)。让问题更简单,如何在我的 webview 中调用应用程序主体中定义的任何 Javascript 函数?很紧急 @HamzaBelheni 抱歉,我无法取消您的问题 @Ghandi 如果我没有解释我的问题,我很抱歉。我开发了一个应用程序,其中包含一行代码,当您安装并打开它到我的网站时直接引导您(webview 的概念) .使用此应用程序在我的网站中导航时,我想使用打开 PDF 文件的插件,该文件定义了应用程序的主体。当我调用下载功能时,它无法识别它。【参考方案2】:根据file transfer plugin documentation,首先您需要创建一个文件来存储您的远程数据。您的代码应如下所示:
//call this after onDeviceReady event
...
var savePath = cordova.file.externalRootDirectory;
var fileName = "ics-android.png";
var url = encodeURI("http://developer.android.com/assets/images/home/ics-android.png");
downloadFile(savePath, fileName, url);
...
function downloadFile(savePath, fileName, remoteURL)
window.resolveLocalFileSystemURL(savePath, function (dirEntry)
console.log('file system open: ' + dirEntry.name);
createFile(dirEntry, fileName, function (fileEntry)
download(remoteURL, fileEntry);
);
, function (err) alert(err) );
function createFile(dirEntry, fileName, callback)
// Creates a new file or returns the file if it already exists.
dirEntry.getFile(fileName, create: true, exclusive: false , function (fileEntry)
callback(fileEntry);
, function (err) alert(err) );
function download(remoteURL, fileEntry)
var fileURL = fileEntry.toURL();
var fileTransfer = new FileTransfer();
fileTransfer.download(
remoteURL,
fileURL,
function (entry)
alert("download complete: " + entry.fullPath);
,
function (error)
alert("download error source " + error.source);
alert("download error target " + error.target);
alert("upload error code" + error.code);
);
请注意,我使用cordova.file.externalRootDirectory作为路径,因此您将获得文件的root sdcard路径。
【讨论】:
我测试了你的代码,但没有调用 download(remoteURL, fileEntry)!!我已经安装了用于 FS 的插件 cordova-plugin-file 但它仍然无法正常工作!!您能否测试您的解决方案,以确保问题不是来自错误的配置或文件安装或类似的东西......非常感谢您 @HamzaBelheni 我修复了我的解决方案。立即尝试 我认为我们非常接近我们的解决方案,但它没有显示和下载文件!当我尝试知道 savePath 的值时,它会显示在警报中(未定义)!但是我从第一次执行您的代码开始,它显示警报(下载完成:) 但没有下载任何文件..之后此警报没有显示在我的应用程序中!以上是关于在 Phonegap 应用程序中使用文件传输插件的主要内容,如果未能解决你的问题,请参考以下文章
Phonegap/cordova 社交分享插件,重复推文问题