即使在清洁相机缓存后,我也从相册中获得相同的图像

时间:2014-11-26 11:41:42

标签: jquery-mobile cordova

我正在构建cordova android项目。问题是通过cordova相机插件添加图片。当我尝试用新的图像删除当前图像时,一切顺利。

始终获取第一张图片。我尝试清除相机缓存并使用一些随机数更改img属性。那没有用。可以做些什么?

$(document).on('touchstart', '#takePic', function () {
    navigator.camera.cleanup();
    navigator.camera.getPicture(onSuccessC, onFail, {
        quality: 70,
        destinationType: Camera.DestinationType.FILE_URI,
        sourceType: Camera.PictureSourceType.SAVEDPHOTOALBUM,
        correctOrientation: true,
        allowEdit: true
    });
    $("#takePic").toggle();
});

function onSuccessC(imageURI) {
    var image = document.getElementById('largeImage');
    image.src = imageURI;
    alert(image.src);
    $("#largeImage").show();
}

$(document).on('touchstart', '#largeImage', function () {
    $("#largeImage").prop("src", "img/logo.png" + '?' + Math.random());
    $("#largeImage").hide();
    $("#takePic").toggle();
});

$(document).on('pagebeforeshow', '#add-vendor', function () {
    $("#largeImage").hide();
});
<div id="takePic" class="ui-btn ui-icon-camera ui-btn-icon-notext"></div>
<img id="largeImage" src="" width="120" hspace="20" vspace="20" />

不能提供一个工作示例,以便在没有cordova.js文件的情况下无法正常工作。

修改

首次自制调查结果。如果我关闭编辑功能,那么图像uri看起来像.... / cache / modified.jpg?1417011797953这显然意味着缓存有效。顺便说一句,所有的waork都很好。

如果我打开编辑功能,我会得到像这样的图像... / chache / .pic.jpg乍一看没有缓存...会进一步看到它。​​

4 个答案:

答案 0 :(得分:3)

进一步调查显示插件中存在错误。启用编辑功能时,缓存无效。为了解决这个问题,我只想添加一些randoms。

function onSuccess(imageURI) {
var image = document.getElementById('largeImage');
image.src = imageURI + '?' + Math.random();
alert(image.src);
$("#largeImage").show();
}

祝你有个美好的一天。

答案 1 :(得分:1)

这不是插件问题。

有一些内部 WebView缓存问题,因为它已经发生在其他人身上。阅读this&amp; this

是的,到目前为止,解决方案是附加时间戳。

答案 2 :(得分:0)

此插件已添加当前时间戳,以使缓存文件名(实际上通过获取具有70%质量的变体来编辑图像,因此需要缓存)是唯一的,并防止您遇到的麻烦(请参阅{{ 3}}

我建议您使用console.log将imageURI打印到调试器,并检查是否以某种方式多次使用相同的URI。

答案 3 :(得分:0)

根据https://github.com/apache/cordova-plugin-camera/blob/master/doc/index.md#description-1cleanup仅适用于Camera.sourceType的值等于Camera.PictureSourceType.CAMERA Camera.destinationType等于{{ 1}}这意味着它仅在您从相机捕获并保存到设备时才有效。