(IOS) Cordova Camera Plugin 引用已删除的图像

Posted

技术标签:

【中文标题】(IOS) Cordova Camera Plugin 引用已删除的图像【英文标题】:(IOS) Cordova Camera Plugin Referring to deleted images 【发布时间】:2013-12-03 20:45:45 【问题描述】:

我正在构建一个 cordova 应用程序(主要用于 iosandroid),用户可以在其中拍摄图像、重新拍摄(等)图像并将其保存在本地。

我目前正在努力使用cordova cameraPlugin。所以,这里是问题的简短描述。

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

一个例子:

    用户拍摄第一张图像。 ==> cdv_photo_001.png 第二个。 ==> cdv_photo_002.png 和第一个将被删除(这似乎工作正常) 第三个。 ==> cdv_photo_001.png 和第二张图片将被删除。

第三张图片看起来与已删除的第一张图片相同。第三张之后的每张图片都会发生这种情况。 重启应用后就可以正常使用了

我已经尝试禁用App-Cache,在更新图像之前删除应用缓存,刷新页面并在线寻找答案。

我在打开相机 UI 时遇到错误,但我也找不到解决方案。

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

摄像头调用代码:

function getPhoto() 
    navigator.camera.getPicture(getPhotoOnSuccess, getPhotoOnFail, 
        quality: 25,
        destinationType: Camera.DestinationType.FILE_URL,
        correctOrientation: true,
        encodingType: Camera.EncodingType.PNG
    );

在 getPhotoOnSuccess 中,我基本上是将图像路径保存到数据库并使用 jQuery 将其附加到视图中。

以及删除图像的代码:(旁注我是 Objective C 的新手)

- (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];

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

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

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

提前致谢。

【问题讨论】:

【参考方案1】:

好吧,我终于明白了。

整个问题与我的代码或任何cordova 代码无关。 那么为什么会发生呢? ==> 我不完全知道,因为似乎这个错误或任何你可能称之为的错误已经发生在很多人身上。

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

我阅读了this thread 并尝试将时间戳附加到图像路径中,它成功了! 我对此的结论是,UIWebView 和缓存管理可能存在问题。 或者它可能证明是一般的 WebView 问题,我将能够在几天后在 Adroid 设备上进行检查。

【讨论】:

你找到安卓的解决方案了吗?我现在在 Android 上遇到了同样的问题。 @jeewan 它在 Android 上也适用于我,但我想这在很大程度上取决于处理文件 IO 的底层插件/代码。我建议为它编写你自己的插件(如果你还没有的话)。 ==> 我们最终削减了对 Cordova 的努力,不再使用原生应用程序,因为 Cordova 存在太多问题,而且性能对客户友好。但也许,这种情况在去年发生了变化。

以上是关于(IOS) Cordova Camera Plugin 引用已删除的图像的主要内容,如果未能解决你的问题,请参考以下文章

Ionic3 使用摄像头

华为机型 cordova-plugin-camera从图库获取报错

Ionic/Cordova Info.plist 丢失 CAMERA_USAGE_DESCRIPTION

Cordova Camera Plugin Android 将额外信息附加到 FILE_URI 的末尾

如何使用离子devapp运行本机相机

在 PhoneGap/Cordova 中安排本地通知在 iOS 模拟器上不起作用