2014-11-04 55 views
8

我必须在我的phonegap项目中实现文件上传功能。用户应该能够从手机存储器或SD卡上传任何类型的文件。我使用jQuery Mobile框架设计的应用程序屏幕。我试过输入类型=“文件”,但它不支持在Android 4.4。我也尝试过phonegap camera API,但它仅支持媒体文件。我发现了一些cordova插件(exm1exm2)。但是这些插件使用自定义用户界面。我想要调用原生文件浏览器来选择文件&它必须在Android平台的Android &中工作。有没有办法实现相同的?使用phonegap调用本机文件浏览器

我发现cordova文件选择器插件(https://github.com/cdibened/filechooser)将有助于android平台,但我无法使其工作。成功回调函数不会立即在文件选择后触发(使用android 4.4.2进行测试)。请找我的代码如下,

<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); 
} 

回答

0

为Android,你可以使用这个插件: https://github.com/cdibened/filechooser

输入文件应在Android上工作过(在大多数版本的,但它不” t工作在Android 4.4,4.4.1和4.4.2) HTML file input in android webview (android 4.4, kitkat)

对于iOS没有插件,您没有本机文件浏览器。

示例项目 https://github.com/jcesarmobile/FileBrowserAndroidTest

+0

我试过上面的插件(https://github.com/cdibened/filechooser)。但我无法使其工作。 “filechooser.open”的第一个参数是强制性的吗?我必须通过支持所有文件类型? 在插件文档中,它写道:“您应该在您的Manifest以及LocalStorageProvider.Authorority字段中更改com.ianhanniballake.localstorage.documents”。我必须改变什么? – 2014-11-06 07:06:34

+0

阅读tobik ansker的问题我链接(http://stackoverflow.com/questions/19882331/html-file-input-in-android-webview-android-4-4-kitkat) – jcesarmobile 2014-11-06 07:27:16

+0

@jcesammobile,我实现了这个插件,但它没有按预期工作。当用户选择第二个文件时,第一个成功回调函数被触发。同样,当用户选择第三个文件时,第二个成功回调函数也会被触发。我正在测试Android 4.4.2。 – 2014-11-06 09:46:59

3

我能得到你的插件,文件选择工作。

有一些必须做虽然某些事情。 你需要打开你的编辑器

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

    ,并附加以下

    import your.package.name.R; 
    

    到这些文件中的每一个。

下面是演示代码我使用:

<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> 

此外,要知道的是,作者的意图这奇巧4.4.4使用。它可能适用于较低版本,但他不确定。

请注意,HTML5选择窗口与此之间的唯一区别在于“内部存储”选项。

希望这会有所帮助。

+0

多文件选择的语法是什么 – 2015-12-26 17:23:17