使用 Phonegap 以编程方式将文件从 SD 卡上传到远程服务器

Posted

技术标签:

【中文标题】使用 Phonegap 以编程方式将文件从 SD 卡上传到远程服务器【英文标题】:Programmatically upload a file from SD Card to a remote server using Phonegap 【发布时间】:2012-05-29 13:03:55 【问题描述】:

我一直在尝试使用 Android 移动设备中的 Phonegap 以编程方式将 (zip) 文件上传到远程服务器。我已经尝试了FileAPI 文档并找到了here 的解决方案。但这似乎不起作用。但是,我可以按照示例中的说明成功上传图像(使用相机和导航器​​)。

我在 SD 卡 的文件夹 test 中有一个文件 test.zip。我需要将此文件上传到远程服务器。

任何有关这方面的帮助都会很棒。

【问题讨论】:

是不是 URI 错误?有没有办法为 SD 卡获取正确的 URI?尝试使用 'file:///test/test.zip' 和 'content://media/external/test/test.zip' 您指出的 FileAPI 表示如果出现错误。错误将在带有 FileTransferError 对象的错误回调中报告。那个物体在说什么? 收到错误“错误回调中的错误:FileTransfer3 = ReferenceError:分配中的左侧无效”。但如果 FILEURI 给出为“content://media/external/images/media/963”,我可以成功上传图像。我认为我的 zip fileURI 有问题? 我自己没用过Phonegap,但是对我来说好像是错误回调函数本身有错误。由于图像上传成功,因此永远不会调用错误回调。如果zip文件上传有错误但当前隐藏在错误回调中的错误后面! 【参考方案1】:

我搞定了,这是我使用的代码

uploadFile('test.zip', 'Test', 'multipart/x-zip');

function uploadFile(fileName, dirName, fileMime) 

    var win = function(r) 
        console.log("Code = " + r.responseCode);
        console.log("Response = " + r.response);
        console.log("Sent = " + r.bytesSent);
        alert(r.response);
    ;

    var fail = function(error) 
        alert("An error has occurred: Code = " = error.code);
    ;

    var fileURI;

    var gotFileSystem = function(fileSystem) 
        fileSystem.root.getDirectory(dirName, 
            create : false
        , function(dataDir) 

            fileURI = dataDir.fullPath;
            fileURI = fileURI + '/' + fileName;

            alert(fileURI);

            var options = new FileUploadOptions();
            options.fileKey = "file";
            options.fileName = fileURI.substr(fileURI.lastIndexOf('/') + 1);
            options.mimeType = fileMime;

            var params = new Object();
            params.value1 = "test";
            params.value2 = "param";

            options.params = params;

            var ft = new FileTransfer();
            ft.upload(fileURI,

                    // Enter the server url
                    "http://example.com/upload.php", win,
                    fail, options);

        , dirFail);

    ;

    // file system fail
    var fsFail = function(error) 
        alert("failed with error code: " + error.code);

    ;

    // get file system to copy or move image file to
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFileSystem,
            fsFail);

    var dirFail = function(error) 
        alert("Directory error code: " + error.code);

    ;

【讨论】:

以上是关于使用 Phonegap 以编程方式将文件从 SD 卡上传到远程服务器的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式从SD卡安装应用程序

如何以编程方式将图像下载到 iPad?

使用 PhoneGap/jQuery Mobile 以编程方式在 iPhone/Android 日历中添加事件?

通过 Phonegap 在 Android 中以编程方式设置静音模式

PhoneGap iOS UIPicker 等效元素:以编程方式选择选项值

如何从 Android API 24+ 在 SD 卡上写入文件