在 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 社交分享插件,重复推文问题

Phonegap 相机插件问题 (DestinationType.FILE_URI)

Cordova / Phonegap 设备到设备文件传输

在 iOS Phonegap 应用程序上序列化文件传输

用于压缩的 iOS Phonegap 插件

如何使用PhoneGap的构建