我正在使用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
如果我这样做,我收到文件未找到异常,文件网址就像
file://storage/emulated/0/images/image.png
以下stackoverflow问题是相关的
Kitkat, error while trying to load an image
这个问题有一个答案,我也试过了,但那也行不通。
我在我的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
答案 0 :(得分:1)
尝试使用Cesidio DiBenedetto插件而不是您使用的插件 https://github.com/cdibened/filechooser
这里有一个使用它的示例项目
答案 1 :(得分:0)
你在合适的时间问了这个问题!我挣扎了几天,我已经解决了。
以下代码适用于4.4以下的Android版本,但不适用于kitkat。
options.fileName = file.substr(file.lastIndexOf('/') + 1);
我创建了一个Android项目,我发现在Android 4.4中,&#39;文件&#39;(文件名)似乎是&#39; 7961&#39;(或其他数字)实际名称&#39; abc.png&#39;。 我们需要的是下面的代码。
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);
如果这对您有用,请告诉我。