PhoneGap Ajax 上传文件

Posted

技术标签:

【中文标题】PhoneGap Ajax 上传文件【英文标题】:PhoneGap Ajax Upload File 【发布时间】:2013-07-30 14:48:09 【问题描述】:

我正在尝试运行 thisPhoneGap 示例以将图像从设备上传到服务器。

    // Wait for PhoneGap to load
    //
    document.addEventListener("deviceready", onDeviceReady, false);

    // PhoneGap is ready
    //
    function onDeviceReady() 

        // Retrieve image file location from specified source
        navigator.camera.getPicture(uploadPhoto,
                                    function(message)  alert('get picture failed'); ,
                                     quality: 50, 
                                    destinationType: navigator.camera.DestinationType.FILE_URI,
                                    sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY 
                                    );

    

    function uploadPhoto(imageURI) 
        var options = new FileUploadOptions();
        options.fileKey="file";
        options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);
        options.mimeType="image/jpeg";

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

        options.params = params;

        var ft = new FileTransfer();
        ft.upload(imageURI, "http://some.server.com/upload.php", win, fail, options);
    

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

    function fail(error) 
        alert("An error has occurred: Code = " + error.code);
        alert("upload error source " + error.source);
        alert("upload error target " + error.target);
    

就我而言,与上面提到的示例不同,我没有使用将数据发布到数据库中的 php 文件,而是使用安全 url 直接通过 html 发布数据。 在桌面版本上看起来像这样的东西:

<form action="https://mySecureUrl.com/?filename=myImage" method="post" enctype="multipart/form-data">
<input type="file" name="myfile"><br>
<input type="submit" value="Upload File to Server">
</form>

现在我尝试使用 PhoneGap FileTransfer() 应用相同的方法,我得到错误代码 3。

var ft = new FileTransfer();
ft.upload(imageURI, encodeURI("https://mySecureUrl.com/?filename=myImage.jpg"), win, fail, options);
是否可以在 PhoneGap 上以这种方法发布文件?怎么样? 如果没有,php 解决方案是什么?

【问题讨论】:

您使用的是哪个版本的 Phonegap?您正在链接到 1.5 中的示例,但此后该方法已更改为 docs.phonegap.com/en/3.0.0/… 嘿,谢谢。我更改了函数名称,但仍然没有运气。当我设置 chunkedMode = false 时,我可以得到文件未找到错误和 http 状态 = 500。我真的迷路了。服务器日志说由于 \r\n 字符导致上传失败......有什么想法吗? 非法字符在哪里?还要检查您的文件密钥。表单上的名称和代码中的键不同。 HTML 表单上的名称? HTML 表单没有出现在我的代码中,这是我如何在桌面版本上发布 imgaes 的一个示例。我在 filekey 中还有哪些其他选项? 【参考方案1】:

options 下的 fileKey 是服务器要查找的名称。在 HTML 中,您将名称设置为“myfile”,而在 javascript 中,您将名称设置为“file”。

<input type="file" name="myfile">

options.fileKey="file";

options.fileKey 和属性名是一回事,所以请确保您的 PHP 在 $_FILES 数组中查找“文件”

【讨论】:

正如我所说,不是这样。 服务器日志说有非法包机。

以上是关于PhoneGap Ajax 上传文件的主要内容,如果未能解决你的问题,请参考以下文章

为啥我将 zip 文件上传到 phonegap 服务时出现错误?

PhoneGap 文件上传选项错误

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

phonegap 上传应用程序时出错:您的二进制文件未针对 iPhone 5 进行优化

其他图片的Phonegap文件传输失败:FileTransfer上传的错误代码3

当我上传新的 zip 文件时,Phonegap 构建拒绝更新我的应用程序