ios - Cordova iOS 文件 API - 将照片移动到持久存储

标签 ios cordova camera phonegap-plugins fileapi

我在 iOS 7 (Cordova 3.4.0-0.1.3 - File API 1.0.1) 下将相机照片移动到持久存储时遇到问题。

我可以捕获照片,当我将文件移动到持久存储时,似乎没有错误,我还收到一个带有 new_entry.fullPath 的文件路径,如/my_folder/12345678.jpg .

但是当我使用该网址将新图像附加到正文时,似乎没有图像(将添加空白图像)。我也尝试过在网址中使用“file://”,但这没有什么区别。

我也有点困惑,因为 new_entry.toURL() 方法返回了一个包含名为“temporary”的文件夹的 URL(例如 cdvfile://localhost/temporary/my_folder/12345678 .jpg),但我使用持久存储。在 iOS 下正确吗?

这是我该函数的相关代码:

var app = {
    capturePhoto: function () {
        if (!navigator.camera) {
            alert('Camera API not supported');
        }

        navigator.camera.getPicture( app.cameraSuccess, app.cameraError, {
            quality: 50,
            destinationType: Camera.DestinationType.FILE_URI
        });

    },

    cameraSuccess: function (imageData) {
        console.log('cameraSuccess: '+imageData);

        app.movePhoto( imageData );
    },

    movePhoto: function (file){
        alert(file);
        window.resolveLocalFileSystemURI( file , app.resolveOnSuccess, app.resOnError);
    },

    resolveOnSuccess: function (entry){
        var d = new Date();
        var n = d.getTime();

        //new file name
        var newFileName = n + ".jpg";
        var myFolderApp = "my_folder";

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

                fileSys.root.getDirectory( myFolderApp,
                    {create:true},
                    function(directory) {
                        entry.moveTo(directory, newFileName, function(new_entry){
                            path = new_entry.fullPath;
                            url = new_entry.toURL();

                            console.log(path+"\n"+url);

                            alert( path+"\n"+url );

                            jQuery('body').append('<img src="'+path+'" />');

                        }, app.resOnError);
                    },
                    app.resOnError);
            },
            app.resOnError);
    },

    resOnError: function(error) {
        alert('Error '+error.code+': '+error.message);
    },
}

最佳答案

2014年5月27日更新:版本1.1.0已发布,因此不再需要使用dev分支。

这是 Cordova 中的一个错误:https://issues.apache.org/jira/browse/CB-6148

它已经在 dev 分支中修复。您可以通过以下步骤更新到 dev 分支:

删除插件:

cordova plugin rm org.apache.cordova.file

安装插件(在本例中我们必须使用 git 语法):

cordova plugin add https://github.com/apache/cordova-plugin-file.git#dev

检查 iOS 构建 > 目标 > 您的应用程序目标 > 构建阶段 > 编译源 添加(如果没有添加)

CDVFile.m
CDVLocalFilesystem.m
CDVAssetLibraryFilesystem.m

关于ios - Cordova iOS 文件 API - 将照片移动到持久存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22865548/

相关文章:

ios - 从 Swift 2.2 升级到 Swift 3.0 后, `continue` 的使用不明确

android - 具有特定版本的“cordova 添加平台 android”

javascript - 调用控制组的 .click() 方法

cordova - Phonegap 相机控制

iphone - 如何实现系统相机app的缩小动画效果?

ios - 检测相机的主动使用

iphone - 将常规 xcode 应用程序项目转换为 iOSOpenDev

iphone - 如何在 IOS 开发中刷新 "socket mobile"扫描仪缓冲区?

iphone - UILabel textRectForBounds 在尝试创建边距时无效

cordova - 通过Phonegap连接到HTTP服务器