Phonegap android无法使用fileTransfer上载图像

Phonegap android无法使用fileTransfer上载图像,android,cordova,Android,Cordova,我正在尝试使用相机捕捉图像并将其上传到AJAX端点。我已经确认该端点可以接受该文件(我在桌面上创建了一个测试HTML文件,该文件发送一个包含图像的表单)。我正在使用Cordova(phonegap)1.7.0,并试图让fileTransfer()正常工作。以下是我遵循的文档链接: 成功回调将触发,但在端点上找不到$\u文件数据 然后我发现了这篇文章: 建议使用options.chunkedMode=false。现在上传需要一年半的时间,最终失败,错误代码为3,我认为这是FileError.A

我正在尝试使用相机捕捉图像并将其上传到AJAX端点。我已经确认该端点可以接受该文件(我在桌面上创建了一个测试HTML文件,该文件发送一个包含图像的表单)。我正在使用Cordova(phonegap)1.7.0,并试图让fileTransfer()正常工作。以下是我遵循的文档链接:

成功回调将触发,但在端点上找不到$\u文件数据

然后我发现了这篇文章:

建议使用
options.chunkedMode=false
。现在上传需要一年半的时间,最终失败,错误代码为3,我认为这是
FileError.ABORT\u ERR

我错过什么了吗

以下应用程序中的我的代码:

     navigator.camera.getPicture(function(imageURI){           
        console.log('take success! uploading...');
        console.log(imageURI);
        var options = new FileUploadOptions();
        options.fileKey = 'file';
        options.fileName = 'spot_image.jpeg';
        options.mimeType = 'image/jpeg';
        var params = new Object();
        params.spot_id = 1788;
        params.param2 = 'something else';
        options.params = params;        
        options.chunkedMode = false;
        var ft = new FileTransfer();
        ft.upload(imageURI,serverURL + '/ajax.php?fname=appuploadspotimage',function(r){
            console.log('upload success!');
            console.log(r.responseCode);
            console.log(r.response);
            console.log(r.bytesSent);
        },function(error){
            console.log('upload error')
            console.log(error.code);
        },options,true);
        console.log('after upload');



    },function(message){
       console.log('fail!');
       console.log(message);
    },{ 
        quality: 50,
        destinationType: navigator.camera.DestinationType.DATA_URL,
        sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY
    });
serverURL
被定义为我的AJAX端点的域,它已在cordova.xml中被列为白名单

关于这一点,我在这里看到了许多问题,对于是否应该使用chunkedMode,有不同的意见。有人也有这个问题吗

我正在运行ICS的三星Galaxy S上尝试这个


愿帮助我解决这个问题的人神秘地继承一家啤酒厂

您不能在FileTransfer上载方法中使用从摄像头成功回调中获得的imageUri,您必须首先将uri解析为如下文件名:

navigator.camera.getPicture(function(imageURI){

      window.resolveLocalFileSystemURI(imageUri, function(fileEntry) {
            fileEntry.file(function(fileObj) {

                var fileName = fileObj.fullPath;

                //now use the fileName in your method
                //ft.upload(fileName ,serverURL + '/ajax.php?fname=appuploadspotimage'...);

            });
        });
});

在有点困惑之后,我觉得你可以直接使用图像uri

请看我的答案:(这对我在android上很有用):


你能在你的服务器上检查一下它收到了什么post参数吗?我遇到了一个类似的问题,最终发现发生的事情是我没有发送options对象correctly@davids您的意思是检查服务器中的
$\u POST
变量吗?我试过了,得到了一个空数组。我也尝试使用
$\u REQUEST
进行检查,但只有我在url中提供的
fname
参数存在<代码>$\u文件显示一个空数组。嘿,这里是DZL。我不再实际使用这个应用程序了,但是谢谢你的代码!我将保存此代码段,并在再次遇到此代码段时尝试一下。谢谢:)我将你的答案标记为已接受。没问题,我最近也在努力解决这个问题,我花了很多时间才弄明白。这个答案对其他人(包括我:)非常有用,谢谢这应该是
resolveLocalFileSystemURL
(而不是URI)?和/或,情况有变吗?@DZL我也面临类似的问题,但无法解决。你能检查一下这个问题吗?也许他们在新的cordova版本中修复了它,自动将uri转换为文件名,但在“cordova-2.2.0.js”中,我使用的是我可以上传文件,但我无法在服务器上打开它。打开该文件的唯一方法是首先调用“window.resolveLocalFileSystemURI”,然后使用从“resolveLocalFileSystemURI”返回的文件名传输它。好的,可能就是这样!