我正在提供带有 HTTP 刷新 header 的占位符图像,如下所示:
Connection:keep-alive
Content-Type:image/gif
Date:Thu, 01 Aug 2013 14:16:25 GMT
Refresh:10; url=/media/thumbs/document/18.png
Server:nginx/1.4.1
Transfer-Encoding:chunked
如果我在整个窗口中加载图像占位符 URL,内容会在 10 秒后刷新,但如果我将相同的 URL 放在图像标记 src 属性中,图像永远不会刷新(在 Chrome 和 FF 中测试)。
我为什么要这样做?我有一个应用程序,其中文档的缩略图需要几秒钟才能由服务器生成(这是一个复杂的 SVG 渲染)。当用户在创建新文档后立即转到文档列表时,缩略图可能还不存在。我试图在几秒钟后使用带有刷新标题的占位符图像来加载真实缩略图。
我不记得是如何做到的,但在 Netscape 浏览器的美好时光里,刷新 header 之类的东西有时是我们破解动画的方式(甚至在 Flash 出现之前——我是史前时代还是什么?)。我们称其为“服务器推送”(我猜这个流行语是用 Comet model 回收的)。
我在客户端使用 Angular.js(服务器端是 Django+uWSGI+Nginx),所以使用 javascript 破解一些东西应该很容易,但我很好奇:有什么技巧吗(没有 javascript)使图像标记在几秒钟后加载另一个来源?
(我也会标记这个 Django 和 Nginx,因为可能有人知道服务器端解决方案)
最佳答案
如果您不需要支持 IE,并且您的 svg 生成时间不会太长以至于会导致连接超时,您可以使用 multipart/x 的 Content-Type 实现类似的效果-混合替换。像这样:
Content-Type: multipart/x-mixed-replace; boundary=myboundary
对于您的实际内容,您首先要像这样写出占位符图像:
--myboundary
Content-Type: image/jpeg
Content-Length: <size of the image in bytes>
<binary image data + CR/LF>
然后立即刷新输出,但保持连接有效(即这将使用分 block 传输编码)。
现在你可以开始生成你的 svg 了,当它完成后,像这样写出来:
--myboundary
Content-Type: image/svg+xml
Content-Length: <size of the image in bytes>
<svg image data + CR/LF>
--myboundary--
基本上就是这样streaming M-JPEG有效,仅在这种情况下帧不全是 jpeg 图像。
关于html - img HTML 标签不支持 HTTP Refresh header (但在浏览器中加载图像 URL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17997549/
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我试图使用yard记录一些Ruby代码,尽管我所做的正是所描述的here或here#@param[Integer]thenumberoftrials(>=0)#@param[Float]successprobabilityineachtrialdefinitialize(n,p)#initialize...end虽然我仍然得到这个奇怪的错误@paramtaghasunknownparametername:the@paramtaghasunknownparametername:success然后生成的html看起来很奇怪。我称yard为:$yarddoc-mmarkdown我做错了什么?
从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.
我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些
我正在学习http://ruby.railstutorial.org/chapters/static-pages上的RubyonRails教程并遇到以下错误StaticPagesHomepageshouldhavethecontent'SampleApp'Failure/Error:page.shouldhave_content('SampleApp')Capybara::ElementNotFound:Unabletofindxpath"/html"#(eval):2:in`text'#./spec/requests/static_pages_spec.rb:7:in`(root)'
我有一个div,它根据表单是否正确提交而改变。我想知道是否可以检查类的特定元素?开始元素看起来像这样。如果输入不正确,添加错误类。 最佳答案 试试这个:browser.div(:id=>"myerrortest").class_name更多信息:http://watir.github.com/watir-webdriver/doc/Watir/HTMLElement.html#class_name-instance_method另一种选择是只查看具有您期望的类的div是否存在browser.div((:id=>"myerrortes