Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Invoke native file browser using phonegap

I have to implement file upload feature in my phonegap project. User should be able to upload any type of file from the phone memory or sd card. The application screens I designed using jQuery Mobile framework. I tried input type="file", but it is not supported in android 4.4. I tried phonegap camera API too, but it is supported only media files. I found some cordova plugins (exm1,exm2 ). But these plugins using custom UI. I want to invoke native file browser for choosing the file & it has to work in both Android & iPhone platforms. Is there a way to implement the same?

I found cordova file chooser plugin (https://github.com/cdibened/filechooser) would be helpful for android platform, but I am unable to make it work. The success callback function is not immediately getting triggered after the file selection (tested with android 4.4.2). Please find my code below,

<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); 
} 
like image 263
Sinu Varghese Avatar asked Nov 04 '14 13:11

Sinu Varghese


1 Answers

I was able to get your plugin, FileChooser working.

There are certain things that have to be done though. You need to open the following with your editor

  • FileChooser.java
  • FileChooserActivity.java
  • FileListAdapter.java
  • FileListFragment.java
  • LocalStorageProvider.java

    and append

    import your.package.name.R;
    

    to each of those files.

Here is the demo code I used:

<html>
<head>
    <title>Hello World</title>
    <script type="text/javascript" src="cordova.js"></script>
    <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
    <script type="text/javascript">
    document.addEventListener("deviceready", function(){

        var success = function(data) {
            alert("File chosen: " + data.filepath); 
        };

        var error = function(msg) {
            console.log( msg );
        };

        $('#fileinput').click(function(e) {
            filechooser.open({}, success,error);
        });
     });
    </script>

</head>

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

Also, be aware that the author intended this to be used in KitKat 4.4.4. It may work with lower versions but he's uncertain.

Take note that the only difference between the HTML5 choice window and this is the "Internal Storage" option.

Hope this helps.

like image 171
wbt11a Avatar answered Sep 27 '22 19:09

wbt11a