Cordova 7,cordova-plugin-file,cordova-plugin-file-transfer,cordova-plugin-camera。在cordova-simulate(微软)和现场设备(Oneplus 5T)上进行测试
因此,我正在开发一款应用,可让用户拍摄图像并将其发送到操作图像的Web服务,并将结果作为响应返回。 这主要是为了确保服务器上没有保存任何内容。
我无法理解整个文件系统的工作原理。我不太清楚如何翻译图像的路径以及它们不显示的原因。
我的应用内容政策:
<meta http-equiv="Content-Security-Policy" content="default-src * gap: file: blob: data: http: cdvfile: ; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
我的JS代码:
function setImage(src){
$('#picture').attr('src',src);
}
function generateImage(){
fileURL = $('#picture').attr('src');
var options = new FileUploadOptions();
options.fileKey = "image";
options.fileName="photo.jpg";
options.mimeType="image/jpeg";
options.chunkedMode = false;
options.params = {somedata:$('#somdata').val()};
var ft = new FileTransfer();
ft.upload(fileURL, encodeURI("https://example.com/generate.php"), win, fail, options);
}
var fail = function(error) {
// error.code == FileTransferError.ABORT_ERR
alert("An error has occurred: Code = " + error.code);
console.log("upload error source " + error.source);
console.log("upload error target " + error.target);
console.log(error);
}
function writeFile(fileEntry, dataObj) {
// Create a FileWriter object for our FileEntry (log.txt).
fileEntry.createWriter(function (fileWriter) {
fileWriter.onwriteend = function() {
console.log("Successful file write...");
setImage(fileEntry.toURL());
};
fileWriter.onerror = function (e) {
console.log("Failed file write: " + e.toString());
};
// If data object is not passed in,
// create a new Blob instead.
if (!dataObj) {
dataObj = new Blob(dataObj, { type: 'image/png' });
}
fileWriter.write(dataObj);
});
}
var win = function(r) {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fs) {
console.log('file system open: ' + fs.name);
date = new Date();
fs.root.getFile(date.getTime()+".png", { create: true, exclusive: false }, function (fileEntry) {
console.log("fileEntry is file?" + fileEntry.isFile.toString());
// fileEntry.name == 'someFile.txt'
// fileEntry.fullPath == '/someFile.txt'
writeFile(fileEntry, r.response);
}, onErrorCreateFile);
}, onErrorLoadFs);
console.log("Should not be called.");
console.log(r);
}
function camera_error(){
console.log('camera error');
}
function camera_success(str){
$('#picture').attr('src',str);
window.resolveLocalFileSystemURI(str, function (fileEntry) {
console.log("success: " + JSON.stringify(fileEntry));
}, function (e) {
console.log("error: " + JSON.stringify(e));
});
}
function getPicture(type){
if(type == 'library'){
navigator.camera.getPicture(camera_success, camera_error,{
sourceType: Camera.PictureSourceType.PHOTOLIBRARY,
encodingType: Camera.EncodingType.JPEG,
destinationType: Camera.DestinationType.NATIVE_URI
});
} else {
navigator.camera.getPicture(camera_success, camera_error,{
encodingType: Camera.EncodingType.JPEG,
destinationType: Camera.DestinationType.NATIVE_URI
});
}
}
因此,让我试着解释我想要做的事情。
以某种方式保存它不起作用。当我去Android设备上的文件系统时,图像就像404错误,即使我100%确定我有正确的文件名。
我缺少什么?
我无法在simuate或实际设备上使用它。
请注意,您在上面看到的大部分代码都是从cordova文档中复制的。
感谢。