我一直在尝试实现这个question的答案,但一直得到错误“selected.getImage不是函数”。
此时我尝试了多个不同的代码示例,我很难过。看起来这是一个类型错误,但我不确定在哪里可以纠正这个。
我希望选择单个图像并返回该图像的路径以便上传到服务器。我不需要在设备上显示它,尽管我认为这是一个选项。似乎很容易,但显然我错过了一些东西。
我正在使用v.6.0.1或imagepicker插件。我引用了代码,但此时我正在使用Shiva Prasad在上述问题中提供的确切示例。
按Max Vollmer添加代码:
var context = imagepickerModule.create({
mode: "single" // allow choosing single image
});
context
.authorize()
.then(function () {
return context.present();
})
.then(function (selection) {
console.log("Selection done:");
setTimeout(() => {
selection.forEach(function (selected) {
selected.getImage().then((source) => {
console.log(selected.fileUri); // this is the uri you need
});
});
}, 1000);
}).catch(function (e) {
console.log(e);
});
答案 0 :(得分:0)
昨天我遇到了完全相同的错误。
我直接在“选择的”上使用fromAsset函数,因为显然在此插件的新版本中,“选择的”是资产。这样就得到了一个imageSource,可以使用“ saveToFile”功能将资产复制到新位置(使用TNS的fileSystemModule获取该位置)。使用此新位置的路径作为您的UI,将显示图像。您也可以从我用于上传的位置fileSystemModule.File.fromPath(path);
创建文件对象。
context
.authorize()
.then(function () {
return context.present();
})
.then(function (selection) {
selection.forEach(function (selected) {
let file;
if (selected._android) {
file = fileSystemModule.File.fromPath(selected._android);
//viewModel.uploadFile(file);
}else{
imageSourceModule.fromAsset(selected).then((imageSource) => {
const folder = fileSystemModule.knownFolders.documents().path;
const fileName = "Photo.png";
const path = fileSystemModule.path.join(folder, fileName);
const saved = imageSource.saveToFile(path, "png");
if (saved) {
console.log("Image saved successfully!");
file = fileSystemModule.File.fromPath(path);
//viewModel.uploadFile(file);
}else{
console.log("Error! - image couldnt save.");
}
});
}
});
}).catch(function (e) {
console.log(e);
// process error
});
说明
未注释的代码段(//viewModel.uploadFile(file);
),viewModel
引用(在您的应用程序中将有所不同)和功能:例如uploadFile
是传递文件以上传文件或将其设置为image.src
等
确保在顶部声明imageSourceModule
。
const imageSourceModule = require("tns-core-modules/image-source");