Currently, I am facing an issue while attempting to integrate the nativescript-imagepicker plugin into my Nativescript App. I keep receiving an error message stating **cannot read **property match of undefined**. Below is a summary of the steps I have taken so far. Your assistance is greatly appreciated.
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];
}
I have excluded the PHP code as I believe the issue does not lie there. However, if you suspect otherwise, please let me know. Your assistance is much appreciated.