从图像相册中选择图像时无法读取文件大小

时间:2014-05-19 11:19:45

标签: javascript android jquery-mobile cordova

在我的phonegap应用程序(Android版本4.4.2)中,我需要选择图像格式的SD卡。在这我无法读取图像大小和名称。我的代码就像。

function getSkiImage(id,source){ 
    navigator.camera.getPicture(function(imageURI){ 
        alert(imageURI); 
        window.resolveLocalFileSystemURI(imageURI, function(fileEntry) { 
            alert(fileEntry); 
            fileEntry.file(function(fileObj) { 
                alert(fileObj.size); 

            }); 
        }); 


// tried this also
/*window.requestFileSystem(imageURI, 0, function(data) { 
    alert(data.size); 

}, fail); */ 


}, fail, { quality: 50, 
    destinationType: destinationType.FILE_URI, 
    sourceType: pictureSource.PHOTOLIBRARY }); 
}

在我的Android设备(v 4.4.2)专辑节目中,如“最近”,“云端硬盘”,“图片”,“图库”,...当从图库中选择图片时,只有图像尺寸正在获取..其他比图库图像大小无法得到..

提到这一点但没有取得成功

Cordova/PhoneGap Photo File Size

在phonegap doc中,他们说:

  仅Android 4.4:Android 4.4引入了新的Storage Access   框架使用户更容易浏览和打开文档   跨所有首选文档存储提供程序。科尔多瓦有   尚未与此新的存储访问框架完全集成。   因此,getPicture()方法将无法正确返回   当用户从“最近”,“驱动器”,“图像”中选择时,图片,   当destinationType为FILE_URI时,或“External Storage”文件夹。   但是,用户将能够正确选择任何图片   他们首先浏览“Gallery”应用程序。可能的解决方法   此问题记录在此StackOverflow问题上。请参阅   CB-5398跟踪这个问题。

     

Android使用意图在设备上启动相机活动   捕获图像,以及具有低内存的手机,Cordova活动   可能会被杀死。在这种情况下,图像可能不会出现时   科尔多瓦活动恢复了。

1 个答案:

答案 0 :(得分:1)

<!DOCTYPE html>
<html>
  <head>
    <title>Capture Photo</title>

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

    var pictureSource;   // picture source
    var destinationType; // sets the format of returned value 

    // Wait for PhoneGap to connect with the device
    //
    document.addEventListener("deviceready",onDeviceReady,false);

    // PhoneGap is ready to be used!
    //
    function onDeviceReady() {
        pictureSource=navigator.camera.PictureSourceType;
        destinationType=navigator.camera.DestinationType;
        getPhoto(pictureSource.PHOTOLIBRARY);
    }


    function onPhotoURISuccess(imageURI) {
      alert(imageURI);

      var largeImage = document.getElementById('largeImage');

      largeImage.style.display = 'block';


      largeImage.src = imageURI;
      window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, rfail);


      window.resolveLocalFileSystemURI(imageURI, onResolveSuccess, fail);
    }

    function rfail(e){
        alert(e);
    }
    function getPhoto(source) {
      // Retrieve image file location from specified source
      navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50, 
        destinationType: destinationType.FILE_URI,
        sourceType: source });
    }
    function onFileSystemSuccess(fileSystem) {
        console.log(fileSystem.name);
    }
    function bytesToSize(bytes) {
        var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
        if (bytes == 0) return 'n/a';
        var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
        return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i];
    };
    function onResolveSuccess(fileEntry) {


        filenameofajax=fileEntry.name;

        var efail = function(evt) {
            console.log("File entry error  "+error.code);
        };
        var win=function(file) {
            console.log(file);
            for (var i in file){
                alert(i+""+file[i]);
            }
            alert(bytesToSize(file.size));

        };
        fileEntry.file(win, efail);
    }
    function efail(e) {
        alert("esa")
    }
    function fail(e) {
        alert("sa")
    }

    // Called if something bad happens.
    // 
    function onFail(message) {
      alert('Failed because: ' + message);
    }

    </script>
  </head>
  <body>
    <button onclick="capturePhoto();">Capture Photo</button> <br>
    <button onclick="capturePhotoEdit();">Capture Editable Photo</button> <br>
    <button onclick="getPhoto(pictureSource.PHOTOLIBRARY);">From Photo Library</button><br>
    <button onclick="getPhoto(pictureSource.SAVEDPHOTOALBUM);">From Photo Album</button><br>
    <img style="display:none;width:60px;height:60px;" id="smallImage" src="" />
    <img style="display:none;" id="largeImage" src="" />
  </body>
</html>

检查这个