用于Android的Cordova'原生文件选择器'插件不起作用

时间:2014-11-06 06:53:53

标签: cordova cordova-plugins

我必须在我的phonegap项目中实现文件上传功能。用户应该能够从手机记忆库或SD卡上传任何类型的文件。我尝试输入type =" file",但在android 4.4中不支持。我也试过了phonegap相机API,但它只支持媒体文件。我发现cordova文件选择器插件(https://github.com/cdibened/filechooser)会有所帮助,但我无法使其工作。成功回调函数在文件选择后不会立即触发。请在下面找到我的代码,

<input type="file" id="fileinput" name="fileinput"/>      

$("#fileinput").bind('click',function(){

       console.log("choose file selected");
       filechooser.open( {}, fileChooseSuccess, fileChooseFailed );
});


function fileChooseSuccess(data) {
        var filepath = data.filepath;
        console.log("file path:"+filepath);
}

function fileChooseFailed(msg) {
        console.log(msg);
}

当用户选择第二个文件时,会触发第一个成功回调函数。同样,当用户选择第三个文件(使用Android 4.4.2测试)时,会触发第二个成功回调函数。我无法解决此问题。 “filechooser.open”的第一个参数是强制性的吗?我必须通过什么来支持所有文件类型?

在插件文档中,它写了“你应该更改你的Manifest中的com.ianhanniballake.localstorage.documents,以及LocalStorageProvider.AUTHORITY字段”。我需要改变什么?

非常感谢任何建议。

1 个答案:

答案 0 :(得分:0)

phonegap / cordova不支持输入文件类型。遗憾。

您需要使用FileTransfer插件,如此示例所示,并在此处讨论How to upload file with Phonegap and JqueryMobile?

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)+'.png';
    options.mimeType="text/plain";

    var params = new Object();

    options.params = params;

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

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

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