繁体   English   中英

Android kitkat:fileChooser + fileTransfer Cordova插件不起作用

[英]Android kitkat: fileChooser + fileTransfer cordova plugin not working

我正在使用apache cordova框架构建一个android应用程序。

在android 4.4中将无法正常工作,如以下问题所述

https://issues.apache.org/jira/browse/CB-5294

为此,我正在使用以下filechooser插件

https://github.com/don/cordova-filechooser

到现在为止,我可以打开文件选择器对话框并选择文件。

当我尝试使用以下代码上传文件时

                var def = Q.defer();
                var options = new FileUploadOptions();
                options.fileKey = "file";
                options.fileName = file.substr(file.lastIndexOf('/') + 1);
                var params = {};
                params.title = title;
                options.params = params;
                options.trustAllHosts = true;
                var ft = new FileTransfer();
                var url = Constants.API_SERVICE_URL + "upload";
                ft.upload(file, encodeURI(url), function(res) {
                    // check for HTTP OK status and success
                    if(res.responseCode === 200 && res.response && res.response.status !== "fail") {
                        def.resolve(res.response);
                    } else {
                        def.reject(res);
                    }
                    def.resolve(res);
                }, function(err) {
                    def.reject(err);
                }, options);
                return def.promise;

这里的文件会像

content://com.android.providers.media.documents/document/image:28029

我有java.lang.SecurityException

我对该主题做了很多研究,但找不到答案。

这个问题在这里描述https://issues.apache.org/jira/browse/CB-5398

那里的问题标记为已解决,但是此注释中描述的解决方法不起作用

https://issues.apache.org/jira/browse/CB-5398?focusedCommentId=13977552&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13977552

如果我这样做,我得到文件未找到异常,则文件URL就像

file://storage/emulated/0/images/image.png

下面的stackoverflow问题是相关的

Kitkat,尝试加载图像时出错

这个问题有一个答案,我也尝试过,但是那也不起作用。

我在我的Android清单文件中添加了MANAGE_DOCUMENTS权限,所有权限列表

<uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>  
<uses-permission android:name="android.permission.WAKE_LOCK"/>  
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>  
<uses-permission android:name="android.permission.USE_CREDENTIALS"/>  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

但是,如果我从图库选项或旧文件管理器中选择文件。 一切正常。

关于如何解决这个问题的任何想法吗?

编辑:

Apache Cordova 3.6版

尝试使用Cesidio DiBenedetto插件,而不要使用https://github.com/cdibened/filechooser的插件。

在这里,您有一个使用它的示例项目

https://github.com/jcesarmobile/FileBrowserAndroidTest

您在正确的时间问了这个问题! 我挣扎了好几天,并且已经解决了。

以下代码适用于4.4以下的Android版本,但不适用于kitkat。

options.fileName = file.substr(file.lastIndexOf('/') + 1);

我创建了一个Android项目,发现使用Android 4.4时,“文件”(文件名)似乎是“ 7961”(或其他数字),而不是实际名称“ abc.png”。 我们需要的是下面的代码。

window.resolveLocalFileSystemURI(imageUri, function (fileEntry) {
                        fileEntry.file(function (fileObj) {
                            var fileName = fileEntry.name;
                            var options = new FileUploadOptions();
                            options.headers = {Connection: "close"};
                            options.fileKey = "uploadfiles";
                            //change the code below.
                            // if(fileName.indexOf('/')>-1){
                            // options.fileName = fileName.substr(fileName.lastIndexOf('/') + 1);
                            options.fileName = fileEntry.nativeURL.substr(fileEntry.nativeURL.lastIndexOf('/') + 1);

让我知道这是否对您有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM