我的应用无法从服务器加载一些图像

时间:2011-06-30 19:12:52

标签: ruby-on-rails ruby debugging file error-handling

我在我的本地WEBrick服务器上使用Ruby on Rails。

我正在从网址生成一些网站图片,将它们写入我的本地文件系统并显示它们。我按照网址命名图片,但用\替换所有-。有些图像似乎没有加载,因为它无法在我的文件系统上找到图像,而且我得到了损坏的图像图标。但是,当我检查文件系统时,我发现所有图像都存在。

这是我在日志中遇到的错误:

Started GET "/images/image_site/http:--www.urbandictionary.com-define.php?term=slim%20shady.jpg?1309465379" for 127.0.0.1 at Thu Jun 30 13:23:06 -0700 2011

ActionController::RoutingError (No route matches "/images/image_site/http:--www.urbandictionary.com-define.php"):

这是我的HTML代码:

<img alt="Http:--www.urbandictionary.com-define.php?term=slim%20shady" class="site_image" src="/images/image_site/http:--www.urbandictionary.com-define.php?term=slim%20shady.jpg?1309465379">

发生了什么,我该如何解决这个问题?如果我需要提供更多信息,请告诉我。

2 个答案:

答案 0 :(得分:3)

您似乎没有在src属性中正确编码图像名称。我猜你有一个像这样的名字的文件:

http:--www.urbandictionary.com-define.php?term=slim%20shady.jpg

但是当你有这个:

src="/images/image_site/http:--www.urbandictionary.com-define.php?term=slim%20shady.jpg?1309465379"

文件名如下所示:

/images/image_site/http:--www.urbandictionary.com-define.php

因为第一个?之后的所有内容都被视为查询字符串的一部分。

用连字符替换斜线是不够的,你仍然会留下各种各样的漏洞,造成混乱和邪恶的意图。相反,您应该完全生成图像文件名,例如id.jpg,其中id是数据库中图像的ID。然后,将原始文件名存储在数据库中,只向人们显示该文件名(正确编码!),不要在本地文件系统中使用它。

快速解决方法是对src属性进行正确的URL编码。但你真的应该弄清楚你如何处理图像,否则你会让自己处理各种各样的麻烦。

答案 1 :(得分:-1)

您需要将图像放在public/文件夹中,然后才能从那里访问它们。默认情况下,Rails将主要从public/服务器静态资产。