无法从phonegap:android中的SD卡读取图像文件

无法从phonegap:android中的SD卡读取图像文件,android,cordova,Android,Cordova,我是一个电话聊天新手。我正在尝试使用android读取SD卡中的文件并对其进行图像处理 phonegap官方教程。问题是图像没有显示,而是在其位置出现了问号 var pictureSource; var destinationType; document.addEventListener("deviceready",onDeviceReady,false); function onDeviceReady(){ document.getElementById("test"

我是一个电话聊天新手。我正在尝试使用android读取SD卡中的文件并对其进行图像处理 phonegap官方教程。问题是图像没有显示,而是在其位置出现了问号

var pictureSource;  
var destinationType;  


document.addEventListener("deviceready",onDeviceReady,false);


function onDeviceReady(){ 

   document.getElementById("test").innerHTML="onready about to request";
   window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, onFail);}





function onFail(message) {
  alert('Failed because: ' + message);
}
function gotFS(fileSystem) {
    fileSystem.root.getFile("1.jpg", null, gotFileEntry, fail);
}

function gotFileEntry(fileEntry) {
    fileEntry.file(gotFile, fail);
}

function gotFile(file){
    readDataUrl(file);

}

function readDataUrl(file) {
     var reader = new FileReader();
    reader.onloadend = function(evt) {
        console.log("Read as data URL");
        console.log(evt.target.result);

    };  
    document.getElementById("smallImage").style.display='block'; 
    document.getElementById("smallImage").src = reader.readAsDataURL(file);

}



function fail(evt) {
    console.log(evt.target.error.code);
}



</script>
我的代码:

var pictureSource;  
var destinationType;  


document.addEventListener("deviceready",onDeviceReady,false);


function onDeviceReady(){ 

   document.getElementById("test").innerHTML="onready about to request";
   window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, onFail);}





function onFail(message) {
  alert('Failed because: ' + message);
}
function gotFS(fileSystem) {
    fileSystem.root.getFile("1.jpg", null, gotFileEntry, fail);
}

function gotFileEntry(fileEntry) {
    fileEntry.file(gotFile, fail);
}

function gotFile(file){
    readDataUrl(file);

}

function readDataUrl(file) {
     var reader = new FileReader();
    reader.onloadend = function(evt) {
        console.log("Read as data URL");
        console.log(evt.target.result);

    };  
    document.getElementById("smallImage").style.display='block'; 
    document.getElementById("smallImage").src = reader.readAsDataURL(file);

}



function fail(evt) {
    console.log(evt.target.error.code);
}



</script>
var图片资源;
变量destinationType;
文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
函数ondevicerady(){
document.getElementById(“test”).innerHTML=“onready about to request”;
requestFileSystem(LocalFileSystem.PERSISTENT,0,gotFS,onFail);}
函数onFail(消息){
警报('失败原因:'+消息);
}
函数gotFS(文件系统){
getFile(“1.jpg”,null,gotFileEntry,fail);
}
函数gotFileEntry(fileEntry){
fileEntry.file(gotFile,fail);
}
函数gotFile(文件){
readDataUrl(文件);
}
函数readDataUrl(文件){
var reader=new FileReader();
reader.onloadend=函数(evt){
log(“读取为数据URL”);
日志(evt.target.result);
};  
document.getElementById(“smallImage”).style.display='block';
document.getElementById(“smallImage”).src=reader.readAsDataURL(文件);
}
功能失效(evt){
log(evt.target.error.code);
}
编辑: 使用API 16和min-sdk8 “smallImage”是一个标签,它与onphotodatasuccess配合使用效果良好。所以,相机在这里不是问题。与相机功能相关的一切都正常。从SD卡读取会给分配声明带来问题。
document.getElementById(“smallImage”).src=reader.readAsDataURL(文件);如果我加上这个,我会得到字符串和未知铬错误-6,否则我会看到通常的图像转换字符串。
谢谢

以下是一个工作示例:

var pictureSource;  
var destinationType;  


document.addEventListener("deviceready",onDeviceReady,false);


function onDeviceReady(){ 

   document.getElementById("test").innerHTML="onready about to request";
   window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, onFail);}





function onFail(message) {
  alert('Failed because: ' + message);
}
function gotFS(fileSystem) {
    fileSystem.root.getFile("1.jpg", null, gotFileEntry, fail);
}

function gotFileEntry(fileEntry) {
    fileEntry.file(gotFile, fail);
}

function gotFile(file){
    readDataUrl(file);

}

function readDataUrl(file) {
     var reader = new FileReader();
    reader.onloadend = function(evt) {
        console.log("Read as data URL");
        console.log(evt.target.result);

    };  
    document.getElementById("smallImage").style.display='block'; 
    document.getElementById("smallImage").src = reader.readAsDataURL(file);

}



function fail(evt) {
    console.log(evt.target.error.code);
}



</script>
编辑:

var pictureSource;  
var destinationType;  


document.addEventListener("deviceready",onDeviceReady,false);


function onDeviceReady(){ 

   document.getElementById("test").innerHTML="onready about to request";
   window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, onFail);}





function onFail(message) {
  alert('Failed because: ' + message);
}
function gotFS(fileSystem) {
    fileSystem.root.getFile("1.jpg", null, gotFileEntry, fail);
}

function gotFileEntry(fileEntry) {
    fileEntry.file(gotFile, fail);
}

function gotFile(file){
    readDataUrl(file);

}

function readDataUrl(file) {
     var reader = new FileReader();
    reader.onloadend = function(evt) {
        console.log("Read as data URL");
        console.log(evt.target.result);

    };  
    document.getElementById("smallImage").style.display='block'; 
    document.getElementById("smallImage").src = reader.readAsDataURL(file);

}



function fail(evt) {
    console.log(evt.target.error.code);
}



</script>
<!DOCTYPE html>
<html>
  <head>
    <title>Pick Photo</title>

    <script type="text/javascript" charset="utf-8" src="cordova-2.2.0.js"></script>
    <script type="text/javascript" charset="utf-8">

    document.addEventListener("deviceready",onDeviceReady,false);

    function onDeviceReady() {
       window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, onFail);
    }

     function onFail(message) {
      alert('Failed because: ' + message);
    }

    function gotFS(fileSystem) {
        fileSystem.root.getFile("1.jpg", {create: true}, gotFileEntry, fail);
    }

    function gotFileEntry(fileEntry) {
        fileEntry.file(gotFile, fail);
    }

    function gotFile(file){
        readDataUrl(file);  
    }

    function readDataUrl(file) {
           var reader = new FileReader();
           reader.onloadend = function(evt) {
           console.log("Read as data URL");
           console.log(evt.target.result);
           document.getElementById("smallImage").style.display='block'; 
           document.getElementById("smallImage").src = evt.target.result;   
        }; 
        reader.readAsDataURL(file);
    }

    function fail(evt) {
        console.log(evt.target.error.code);
    }
    </script>
  </head>
  <body>
    <img style="display:none;width:60px;height:60px;" id="smallImage" src="" />
    <img style="display:none;" id="largeImage" src="" />
  </body>
</html>

挑选照片
文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
函数ondevicerady(){
requestFileSystem(LocalFileSystem.PERSISTENT,0,gotFS,onFail);
}
函数onFail(消息){
警报('失败原因:'+消息);
}
函数gotFS(文件系统){
getFile(“1.jpg”,{create:true},gotFileEntry,fail);
}
函数gotFileEntry(fileEntry){
fileEntry.file(gotFile,fail);
}
函数gotFile(文件){
readDataUrl(文件);
}
函数readDataUrl(文件){
var reader=new FileReader();
reader.onloadend=函数(evt){
log(“读取为数据URL”);
日志(evt.target.result);
document.getElementById(“smallImage”).style.display='block';
document.getElementById(“smallImage”).src=evt.target.result;
}; 
reader.readAsDataURL(文件);
}
功能失效(evt){
log(evt.target.error.code);
}
这将允许您从SD卡中拾取任何指定的图像

var pictureSource;  
var destinationType;  


document.addEventListener("deviceready",onDeviceReady,false);


function onDeviceReady(){ 

   document.getElementById("test").innerHTML="onready about to request";
   window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, onFail);}





function onFail(message) {
  alert('Failed because: ' + message);
}
function gotFS(fileSystem) {
    fileSystem.root.getFile("1.jpg", null, gotFileEntry, fail);
}

function gotFileEntry(fileEntry) {
    fileEntry.file(gotFile, fail);
}

function gotFile(file){
    readDataUrl(file);

}

function readDataUrl(file) {
     var reader = new FileReader();
    reader.onloadend = function(evt) {
        console.log("Read as data URL");
        console.log(evt.target.result);

    };  
    document.getElementById("smallImage").style.display='block'; 
    document.getElementById("smallImage").src = reader.readAsDataURL(file);

}



function fail(evt) {
    console.log(evt.target.error.code);
}



</script>
希望这对你有帮助

var pictureSource;  
var destinationType;  


document.addEventListener("deviceready",onDeviceReady,false);


function onDeviceReady(){ 

   document.getElementById("test").innerHTML="onready about to request";
   window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, onFail);}





function onFail(message) {
  alert('Failed because: ' + message);
}
function gotFS(fileSystem) {
    fileSystem.root.getFile("1.jpg", null, gotFileEntry, fail);
}

function gotFileEntry(fileEntry) {
    fileEntry.file(gotFile, fail);
}

function gotFile(file){
    readDataUrl(file);

}

function readDataUrl(file) {
     var reader = new FileReader();
    reader.onloadend = function(evt) {
        console.log("Read as data URL");
        console.log(evt.target.result);

    };  
    document.getElementById("smallImage").style.display='block'; 
    document.getElementById("smallImage").src = reader.readAsDataURL(file);

}



function fail(evt) {
    console.log(evt.target.error.code);
}



</script>
谢谢。

试试这个:
var pictureSource;  
var destinationType;  


document.addEventListener("deviceready",onDeviceReady,false);


function onDeviceReady(){ 

   document.getElementById("test").innerHTML="onready about to request";
   window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, onFail);}





function onFail(message) {
  alert('Failed because: ' + message);
}
function gotFS(fileSystem) {
    fileSystem.root.getFile("1.jpg", null, gotFileEntry, fail);
}

function gotFileEntry(fileEntry) {
    fileEntry.file(gotFile, fail);
}

function gotFile(file){
    readDataUrl(file);

}

function readDataUrl(file) {
     var reader = new FileReader();
    reader.onloadend = function(evt) {
        console.log("Read as data URL");
        console.log(evt.target.result);

    };  
    document.getElementById("smallImage").style.display='block'; 
    document.getElementById("smallImage").src = reader.readAsDataURL(file);

}



function fail(evt) {
    console.log(evt.target.error.code);
}



</script>

var pictureSource;  
var destinationType;  


document.addEventListener("deviceready",onDeviceReady,false);


function onDeviceReady(){ 

   document.getElementById("test").innerHTML="onready about to request";
   window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, onFail);}





function onFail(message) {
  alert('Failed because: ' + message);
}
function gotFS(fileSystem) {
    fileSystem.root.getFile("1.jpg", null, gotFileEntry, fail);
}

function gotFileEntry(fileEntry) {
    fileEntry.file(gotFile, fail);
}

function gotFile(file){
    readDataUrl(file);

}

function readDataUrl(file) {
     var reader = new FileReader();
    reader.onloadend = function(evt) {
        console.log("Read as data URL");
        console.log(evt.target.result);

    };  
    document.getElementById("smallImage").style.display='block'; 
    document.getElementById("smallImage").src = reader.readAsDataURL(file);

}



function fail(evt) {
    console.log(evt.target.error.code);
}



</script>

文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
函数ondevicerady(){
//此文件必须存在
变量位置=”file:///storage/emulated/0/DCIM/Camera/20141105_124208.jpg";
resolveLocalFileSystemURL(位置、函数(oFile){
oFile.file(函数(readyFile){
var reader=new FileReader();
reader.onloadend=函数(evt){
document.getElementById(“smallImage”).style.display='block';
document.getElementById(“smallImage”).src=evt.target.result;
};
reader.readAsDataURL(readyFile);
});
},函数(err){
log('####ERR:filesystem.directoryUp()-'+(JSON.stringify(ERR)));
});

在初始化后为
imageURI
smallImage
在您的
onPhotoDataSuccess
方法中添加警报。并将这两个值粘贴到此处。@PratikSharma:onPhotoDataSuccess工作正常。我添加了警报(“成功”);但它似乎没有任何视觉效果。然而,我的日志记录事件工作正常,并显示图像的一个长字符串,其中包含代码中指定的行:console.log(“读取为数据URL”);console.log(evt.target.result);adding document.getElementById(“smallImage”).src=reader.readAsDataURL(文件);生成一个错误“Unknown chromium error:-6”,我无法理解该错误。此代码用于相机。正如您所看到的,我正在尝试从内存中读取图像名称,如“1.jpg”。同样,相机工作正常,包括imageUri等。从内存中读取似乎没有任何效果。此外,在我的例子中,smallImage.src=“data:image/jpeg;base64,”+imageData;也不工作。您需要什么?您需要从相机还是从多媒体资料中捕获图像?以及“1.jpg”需要什么,我不明白。正如我所提到的,我不需要从相机读取。我只是尝试使用文件系统api并从/mnt/sdcard读取一个文件。我希望读取sdcard中的所有图像,而不管它们在哪个文件夹中。这只是一个试读。1.jpg由我添加到我的sdcard文件夹中。你尝试过我的解决方案吗?这是同样适用。它将允许您从库中选择图像并设置图像div。它不是用于打开相机。好的,我知道了,您正在尝试从Photolibrary读取。但我需要使用文件系统api。我已经编辑了脚本并删除了onphotodatasuccess等。只留下文件系统代码以消除任何混淆。T谢谢你的努力。