Мое приложение не может загрузить некоторые изображения с сервера - PullRequest
0 голосов
/ 30 июня 2011

Я использую Ruby on Rails на своем локальном сервере WEBrick.

Я генерирую некоторые изображения веб-сайтов из URL-адресов, записываю их в мою локальную файловую систему и отображаю их.Я называю изображения по их URL, но заменяю все \ на -.Некоторые изображения, кажется, не загружаются, потому что он не может найти изображения в моей файловой системе, и я получаю значок сломанного изображения.Тем не менее, я вижу, что все изображения есть, когда я проверяю свою файловую систему.

Это ошибка, которую я получаю в своих журналах:

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 ]

3 голосов
/ 30 июня 2011

Похоже, вы неправильно кодируете имена изображений в атрибуте 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 - это идентификатор изображения в вашей базе данных. Затем сохраните исходное имя файла в вашей базе данных и покажите это имя (правильно закодированное!) Людям, не используйте его в локальной файловой системе.

Быстрое решение проблемы - правильно закодировать URL-атрибуты src. Но вы действительно должны исправить то, как вы обрабатываете изображения, или вы оставите себя открытым для всевозможных неприятностей.

0 голосов
/ 30 июня 2011

Вам нужно поместить изображения в папку public/, а затем получить к ним доступ. По умолчанию Rails будет обслуживать статические ресурсы преимущественно с public/.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...