Phonegap android无法使用fileTransfer上传图片

时间:2012-08-01 07:15:57

标签: android cordova

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

http://docs.phonegap.com/en/1.0.0/phonegap_file_file.md.html#FileTransfer

成功回调触发,但在端点上找不到$ _FILES数据。

然后我发现了这篇文章:

http://zacvineyard.com/blog/2011/03/25/upload-a-file-to-a-remote-server-with-phonegap/

建议使用options.chunkedMode = false。现在上传需要一年半的时间,最终失败,错误代码为3,我认为是FileError.ABORT_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中列入白名单。

我在SO中已经看到了很多关于这个的问题,这些问题对于是否应该使用chunkedMode有不同的看法。任何人都有这个问题吗?

我在三星Galaxy S上尝试这个,运行ICS。

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

2 个答案:

答案 0 :(得分:5)

你不能使用你在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'...);

            });
        });
});

答案 1 :(得分:0)

在困惑之后,在我看来你可以直接使用图像uri ....

在这里看到我的答案:(这对我来说适用于android):

android phonegap camera and image uploading