(IOS)Cordova摄像头插件,指删除的图像

(IOS)Cordova摄像头插件,指删除的图像,ios,image,cordova,camera,Ios,Image,Cordova,Camera,我正在构建一个cordova应用程序(主要针对IOS和Android),用户可以在其中拍摄图像、重拍(等)图像并将其保存到本地 我现在正在和科尔多瓦卡默拉普卢金斗争。下面是对问题的简短描述 当用户拍摄图像时,图像将保存在本地的apps temp文件夹中,用户可以在UIWebView中查看。重新拍摄时,映像将从临时文件夹中删除,并且不再可用(在RAM和本地FS中)。 只要用户不重新获取图像2次或2次以上,它就可以工作,如果用户重新获取图像而不是最后一幅图像,则第一幅图像将在WebView中被引用/

我正在构建一个cordova应用程序(主要针对IOS和Android),用户可以在其中拍摄图像、重拍(等)图像并将其保存到本地

我现在正在和科尔多瓦卡默拉普卢金斗争。下面是对问题的简短描述

当用户拍摄图像时,图像将保存在本地的apps temp文件夹中,用户可以在UIWebView中查看。重新拍摄时,映像将从临时文件夹中删除,并且不再可用(在RAM和本地FS中)。 只要用户不重新获取图像2次或2次以上,它就可以工作,如果用户重新获取图像而不是最后一幅图像,则第一幅图像将在WebView中被引用/渲染。重新打开应用程序后,图像将正确显示

例如:

  • 用户拍摄第一张图像。==>cdv_photo_001.png
  • 第二个。==>cdv_photo_002.png,第一个将被删除(似乎工作正常)
  • 还有第三个。==>cdv_photo_001.png和第二幅图像将被删除
  • 第三个图像将与删除的第一个图像相同。在第三幅图像之后的每幅图像都会出现这种情况。 重新启动应用程序后工作正常

    我已经尝试禁用应用缓存,在更新图像、刷新页面和在线查找答案之前删除应用缓存

    我在打开相机用户界面时出错,但我也找不到解决方案

    对尚未渲染的视图进行快照将导致空快照。确保您的视图以前至少已渲染过一次 屏幕更新后的快照或快照

    摄像机呼叫的代码:

    function getPhoto() {
        navigator.camera.getPicture(getPhotoOnSuccess, getPhotoOnFail, {
            quality: 25,
            destinationType: Camera.DestinationType.FILE_URL,
            correctOrientation: true,
            encodingType: Camera.EncodingType.PNG
        });
    }
    
    在getPhotoOnSuccess中,我基本上是将图像路径保存到db中,并使用jQuery将其附加到视图中

    以及删除图像的代码:(旁注:我对目标C不熟悉)

    删除该文件后,该文件不再位于目录中,因此我猜它可以正常工作。 一个重要的细节可能是,我编写了自己的IOS cordova插件,因为cordova提供的文件系统访问方法很糟糕

    就这样。 具体的问题是:为什么会发生这种情况以及如何发生这种情况,是否有机会改变这种行为?如果是,我应该如何进行

    顺便说一下,我使用的是cordova 3.1.0,构建目标是IOS 7


    提前谢谢。

    好了,伙计们,我终于拿到了

    整个问题与我的代码或任何cordova代码无关。 那么为什么会这样呢?==>我不太清楚,因为似乎很多人都遇到过这个bug,或者你可以叫它什么

    他们都像我一样试图删除或停用缓存,他们的一些问题与我的问题非常接近,但大多数都不是,所以我花了一段时间才找到解决方案

    我阅读并尝试将时间戳附加到图像路径,结果成功了! 我的结论是,UIWebView和缓存管理可能存在问题。

    或者这可能证明是一个一般的WebView问题,几天后我将能够在Adroid设备上检查这一点。

    您找到Android的解决方案了吗?我现在在Android上也遇到了同样的问题。@jeewan它在Android上也对我有效,但我想这在很大程度上取决于处理文件IO的底层插件/代码。我建议您为它编写自己的插件(如果您还没有)我们最终放弃了Cordova的努力,不再使用本机应用程序,因为Cordova存在太多问题,而且性能对客户不友好。但也许,这在去年已经改变了。
    - (void) deleteImageByPath:(NSString *)imagePath withSelector:(SEL)selector{
        NSError *error = nil;
        NSFileManager *mgr = [NSFileManager defaultManager];
        NSString *tempFolder = NSTemporaryDirectory();
    
        if([mgr removeItemAtPath: imagePath error:&error] == NO) {
            NSLog(@"File deleted");
        }
    
        //The files can be edited as well, so there can be two files in different directories
        if(error != nil){    
            NSString *imgEl = tempFolder;
            imgEl = [imgEl stringByAppendingPathComponent:imagePath.lastPathComponent];
            if(![mgr removeItemAtPath:imgEl error:&error]){
                NSLog(@"Old element couln't be deleted.");
            }
        }
    
        [self performSelector:selector withObject:error];
    }