我正在使用“carrierwave”宝石上传图像文件,还使用“carrierwave backgrounder”来处理上传+在后台使用RMagick处理图像(我使用延迟作业)。
一切都像魅力一样。除了一件事 - 我想上传图片并在上传表单下显示它们(因此,所有内容都发生在同一页面上)。所以,基本上,会发生什么 - 因为上传和图像处理相对较慢,到发布后页面呈现时 - 图像本身还没有准备好:所以image_tag显示了破碎的“资产”链接(href =“资产”)。等待2-3秒(几次刷新)后,图像出现在屏幕上。
所以,我的问题是 - 我可以以某种方式显示“ LOADING ”动画(或文字,或其他图片 - 无所谓)反而破碎(尚未提供)图像,一旦准备就绪 - 向用户显示图像。这可以在没有AJAX的情况下完成吗?或者我应该考虑用AJAX重新做它?
对不起,故事很长。希望对你有所帮助!
提前致谢! :)
答案 0 :(得分:2)
我的解决方案非常简单:我观察数据库中是否有任何包含“tmp”字段的图像(s.t tmp!= null)。如果是这样 - 它们正在后台处理,所以我使用setInterval函数,它一直询问tmp是否为null:一旦它为null,处理就完成了。如果不是 - 正在运行加载动画而不是上传的图像。非常简单。
答案 1 :(得分:1)
你有不同的方法来实现这个目标:
一个是使用https://github.com/lardawge/carrierwave_backgrounder,因此您将知道图像是否正在使用其使用的新列进行处理。
您也可以按照此处所述使用JS File API:http://kellishaver.tumblr.com/post/21428272282/using-the-file-api-to-preview-images-before-uploading
我猜还有其他选择。