当前位置: 首页 > 知识库问答 >
问题:

Cordova 3.4.0:Camera.getPicture()从GALLERY中选择时返回编码的URI

危彬彬
2023-03-14

我正在使用Camera.getPicture() API来捕获图像或从图库中选择图像。当我用相机拍照时,它返回给我一个包含正确的URL、文件名和扩展名的文件条目。但是当我从Gallery中选择一个文件时,它会返回“FileEntry.fullPath”作为/com . Android . providers . media . documents/document/image:322,有时会返回/media/external/images/media/319

我想要的是,我想验证支持的文件类型(即jpg/jpeg)和实际的文件名。

有没有办法得到带扩展名的文件名,也就是选中的。

提前感谢。

代码片段:

        var data = {};
        if( type === CAMERA){
            data = {
                        quality: quality,
                        destinationType: FILE_URI,
                        encodingType: JPEG, targetWidth: 1200, targetHeight: 1200,
                        saveToPhotoAlbum: true
                    };
        }
        else
        {
            data = {
                        destinationType: FILE_URI,
                        sourceType: PHOTOLIBRARY,
                        mediaType: ALLMEDIA

                    };
        }


        navigator.camera.getPicture(
                successCallback, errorCallback, data
        );   

      //The success callback method is : 
       successCallback: function(imageURI, param)
       {
                 //HERE THE imageURI value is coming with different format if selected from GALLERY
                 window.resolveLocalFileSystemURI(imageURI, 
            function(fileEntry) {fileEntry.file(onSuccess,onError);},
                            function(evt) {onError.call(this,evt.target.error);} );

       }

共有2个答案

姜宏盛
2023-03-14

在phonegap获取图片的方法navigator.camera.getPicture(cama成功, camaError,[camaOptions]);

我们可以给摄影师选择

{ quality : 75,
  destinationType : Camera.DestinationType.DATA_URL,
  sourceType : Camera.PictureSourceType.CAMERA,
  allowEdit : true,
  encodingType: Camera.EncodingType.JPEG,
  targetWidth: 100,
  targetHeight: 100,
  popoverOptions: CameraPopoverOptions,
  saveToPhotoAlbum: false };

首先检查选项。

Android怪癖

仅适用于Android 4.4:Android 4.4引入了一个新的存储访问框架,使用户可以更轻松地浏览和打开所有首选文档存储提供商的文档。Cordova还没有与这个新的存储访问框架完全集成。因此,当destinationType为FILE_URI时,当用户从“最近”、“驱动器”、“图像”或“外部存储”文件夹中进行选择时,getPicture()方法将不会正确返回图片。然而,如果用户首先通过“图库”应用程序,他们将能够正确地选择任何图片。此问题的潜在解决方法记录在此StackOverflow问题中。请参阅CB-5398以跟踪此问题。

Android使用意图在设备上启动相机活动来捕获图像,而在内存不足的手机上,Cordova活动可能会被杀死。在这种情况下,图像可能不会出现时 Cordova 活动恢复。

如果你得到了fileEntry,你可以使用file()方法得到mettadatas

 function cameraSuccess(urls) {

       window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(){

                    // alert('success requestFileSystem');

                 }, function(){
                 //error

                   });

        window.resolveLocalFileSystemURI(urls, function(fileEntry){


                   fileEntry.file(function(file){

                             // alert(JSON.stringify(file)); //view full metadata
                                var type = file.type;
                                var nameoffile = file.name;

                               }, function(){

                                //error                                                 
                                });

                  },function(){

                 // error 
                  } ); 

最后一个选项是创建一个自定义插件来查找图像类型

徐佐
2023-03-14

使用这个插件:https://www.npmjs.com/package/cordova-plugin-filepath.,我能够将“内容://”URI转换成“文件://”URI

获得“file://”URI后,我就可以使用Cordova的解析LocalFileSystemURL()函数。

希望这有帮助。

if (fileUri.startsWith("content://")) {
    //We have a native file path (usually returned when a user gets a file from their Android gallery)
    //Let's convert to a fileUri that we can consume properly
    window.FilePath.resolveNativePath(fileUri, function(localFileUri) {
        window.resolveLocalFileSystemURL("file://" + localFileUri, function(fileEntry) {/*Do Something*/});
    });
}
 类似资料:
  • 问题内容: 我正在使用PostgreSQL 9.3。 我想复制一些数据库记录。由于我正在为表使用自动递增的pk ID,因此我想将ID映射从生成的重复记录ID找回原始记录。例如,假设我有一个包含2条记录的表: 使用SQL: 我希望看到类似的映射: 关于如何填写上面的问号以使其起作用的任何想法吗?非常感谢! 问题答案: 这对于来说会更简单,在此子句中可以看到加入到更新中的其他行: 仅使用SQL返回UP

  • 问题内容: 在Node.js中使用Mongoose,您可以使用find返回一些字段。例如。 但我似乎无法弄清楚如何使用findOneAndUpdate返回某些字段。 有人做到过吗?我在文档中找不到它。 问题答案: 从说明书,该参数需要一个关键的它,因为还有其他的细节,比如和地方适用。您 还 需要以下选项: 您也可以使用 请注意,没有返回的文档处于处理更新修改 之前 的状态。有时候这就是您的意思,但

  • 由于我支持Kitkat版本的应用程序,现在从gallery中检索文件的方式有所不同。 我更喜欢这个Android画廊在奇巧返回不同的意图Uri。ACTION_GET_CONTENT检索文件从画廊和成功的工作,但我需要绝对路径的文件,我得到 对于下面的19个版本,我们使用了不同的uri,通过这种方式我得到了路径 但在19版本中,它会给我空值如何获得用户选择的图像文件的绝对路径。 谢谢

  • 问题内容: 使用SQL Server 2012: 产量 必须指定要从中选择的表 这正是我所期望的。 但有趣的是 返回1。 有人可以向我解释这里算什么吗? 编辑:并可能包括来源… 问题答案: SQL Server(在幕后)有效地将from应用于仅具有一行的虚拟表。因此,您将得到1作为计数。 会做同样的事情,例如,一次返回“ test”。 就像Oracle中的DUAL表,DB2中的SYSDUMMY1等

  • 我有一个选择框,上面附有国家值(例如英国) 我的目标是根据所选的选项在页面上显示国旗图像 无法在选择选项中插入图像路径,因此我希望能够提取选项值的最后2个字符,并在生成的图像src eg中使用它们 印度 这可以用js来完成吗? 我有以下与jQuery返回所选选项的文本值的时刻,但想在图像URL实现这一点。

  • 我在Cassandra列族的动态列中插入了字符串和整数值。当我查询CQL的值时,它们显示为十六进制编码的位。 我能以某种方式告诉查询将值解码为字符串或整数吗? 如果这更容易,我也很乐意在CLI中执行此操作。在那里,我看到你可以指定