[英]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问题是相关的
这个问题有一个答案,我也尝试过,但是那也不起作用。
我在我的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的插件。
在这里,您有一个使用它的示例项目
您在正确的时间问了这个问题! 我挣扎了好几天,并且已经解决了。
以下代码适用于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.