这里涉及两个条件:
1)当用户首次进入该页面时,图像可能不已上传且未显示任何内容。
2)图片可能已经上传,在这种情况下,当上传新图片以替换它时,它应该实时显示和覆盖。
整个上传内容并立即显示,它只是在我遇到困难的情况2中更新图像。
当我上传图片时,会发生两件事情,如下所示:
uploadImage('myDirective', d_canvas, 'image/png', function (error, downloadUrl) {
if (! error) {
Meteor.call('updateDatabase', versionId, downloadUrl)
Session.set('imageAvailableAt', downloadUrl)
}
})
首先,它调用一个方法来更新数据库以添加新的url。其次,它在Session变量中设置相同的url。请注意,无论图像是否存在,网址都是相同的,如果存在则会自动覆盖。
图像审核在模板中如下所示:
{{#with uploadedImage}}
<div class="preview-of-uploaded-image">
<img src="{{this}}">
</div>
{{/with}}
帮助者:
var image = Session.get('imageAvailableAt')
return image
好的,这需要处理案例1 ,并且在上传时会非常整洁地显示图像。
但很明显,当图像已经上传到此处时,没有显示任何内容,我在onRendered
上设置了相同的Session变量,但是当我上传新内容时它不会更新。我尝试了不同的Session变量和条件,但没有运气。我还试过了Tracker.autorun
,但根据文档中的描述,它根本不起作用,所以我也很快就放弃了。
我该怎么办?
答案 0 :(得分:1)
您正面临缓存问题,浏览器正在缓存图片网址,虽然指向的实际资源已更新,但它会在一段时间内继续显示旧版本。
解决问题需要做的是在修改集合服务器端时为URL添加时间戳。
在Meteor方法中,更新集合时,请务必使用以下内容用当前时间戳装饰URL:
Meteor.methods({
updateDatabase: function(versionId, downloadUrl){
check(versionId, String);
check(downloadUrl, String);
[...]
Collection.update({
downloadUrl: downloadUrl + "?timestamp=" + Date.now()
});
}
});