Javascript “我该如何解决?”;无法读取未定义的属性匹配;在此代码中
我正在尝试将nativescript imagepicker插件集成到我的nativescript应用程序中,但出现错误**无法读取**未定义的属性匹配**** 下面是我已经尝试过的,谢谢Javascript “我该如何解决?”;无法读取未定义的属性匹配;在此代码中,javascript,nativescript,nativescript-plugin,Javascript,Nativescript,Nativescript Plugin,我正在尝试将nativescript imagepicker插件集成到我的nativescript应用程序中,但出现错误**无法读取**未定义的属性匹配**** 下面是我已经尝试过的,谢谢 function onSelectSingleTap(args) { var context = imagepickerModule.create({ mode: "single" }); if (platformModule.device.os === "Andr
function onSelectSingleTap(args) {
var context = imagepickerModule.create({
mode: "single"
});
if (platformModule.device.os === "Android" && platformModule.device.sdkVersion >= 23) {
permissions.requestPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE, "I need these permissions to read from storage")
.then(function() {
console.log("Permissions granted!");
startSelection(context);
})
.catch(function() {
console.log("Uh oh, no permissions - plan B time!");
});
} else {
startSelection(context);
}
}
function sendImages(selected) {
let fileUri = selected.fileUri;
imageName = extractImageName(fileUri);
var request = {
url: "http://vvvvvv.com/skog/upload.php",
method: "POST",
headers: {
"Content-Type": "application/octet-stream",
"File-Name": imageName
},
description: "{ 'uploading': " + imageName + " }"
};
//get the image source and upload from there
selected.getImage().then(imageSource => {
let temp = fs.knownFolders.temp();
let uniqueName = '_' + Math.random().toString(36).substr(2, 9);
let filePath = fs.path.join(temp.path, uniqueName + ".jpg");
let saved = imageSource.saveToFile(filePath, enums.ImageFormat.jpeg);
console.log(`item saved:${saved}`);
var task = session.uploadFile(filePath, request);
task.on("progress", logEvent);
task.on("error", logEvent);
task.on("complete", x => cleanFile(filePath));
});
//return task;
}
function logEvent(e) {
console.log("----------------");
console.log('Status: ' + e.eventName);
console.log('Error: ' + e.error);
// console.log(e.object);
if (e.totalBytes !== undefined) {
console.log('current bytes transfered: ' + e.currentBytes);
console.log('Total bytes to transfer: ' + e.totalBytes);
}
}
function cleanFile(file){
fs.remove(file);
}
function startSelection(context) {
context
.authorize()
.then(function() {
imageItems.length = 0;
return context.present();
})
.then(function(selection) {
selection.forEach(function(selected) {
sendImages(selected);
//selected.uploadTask = sendImages(selected);
selected.imageName = imageName;
console.log("----------------");
console.log("uri: " + selected.uri);
console.log("fileUri: " + selected.fileUri);
console.log('Image name:' + imageName);
imageItems.push(selected);
});
//list.items = selection;
}).catch(function (e) {
console.log(e);
alert(e.message);
});
}
function extractImageName(fileUri) {
var pattern = /[^/]*$/;
var imageName = fileUri.match(pattern);
return imageName[0];
}
我不认为错误来自php,这就是为什么我不在问题中添加代码的原因,但是如果你不这么认为,请让我知道
请帮助
选择
是一个数组,因此选择了。getImage()
显然是未定义的
。它只有getImageAsync(…)
,但返回本机图像数据
要从资产创建,应使用fromsets
方法
fileUri
也是未定义的
,没有这样的属性。我不知道你是从哪里挑选的。我建议您参考文档中所有有效的属性和方法。这样就可以了
function onSelectSingleTap(args) {
var context = imagepickerModule.create({
mode: "single"
});
if (platformModule.device.os === "Android" && platformModule.device.sdkVersion >= 23) {
permissions.requestPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE, "I need these permissions to read from storage")
.then(function () {
console.log("Permissions granted!");
startSelection(context);
})
.catch(function () {
console.log("Uh oh, no permissions - plan B time!");
});
} else {
startSelection(context);
}
}
function startSelection(context) {
context
.authorize()
.then(function () {
return context.present();
})
.then(function (selection) {
selection.forEach(function(selected) {
//alert(selected.android.toString());
var file = selected.android.toString();
var url = "https://adekunletestprojects.000webhostapp.com/skog/upload.php";
var name = file.substr(file.lastIndexOf("/") + 1);
//alert(name);
var bghttp = require("nativescript-background-http");
var session = bghttp.session("image-upload");
var request = {
url: url,
method: "POST",
headers: {
"Content-Type": "application/octet-stream",
"File-Name": name
},
description: "Uploading " + name
};
var task = session.uploadFile(file, request);
task.on("progress", progressHandler);
return task;
function progressHandler(e) {
var toast = Toast.makeText("uploaded " + e.currentBytes + " / " + e.totalBytes);
toast.show();
}
});
}).catch(function (e) {
console.log(e.eventName);
alert(e.message);
});
}
说明:“{‘上传’:“+imageName+”}”
— 看起来不太好。它不是JSON,并且imageName
将不带引号。您没有以任何方式解析它,是吗?在调用extractImageName
时,您是否可以验证您正在传递字符串?