기존 디렉토리 위치에없는 미디어 리소스에 액세스하도록 레일을 어떻게 구성합니까?

StackOverflow https://stackoverflow.com/questions/1029442

문제

일반 위치에 상주하지 않는 이미지가 있다고 가정 해 봅시다.

{appname}/public/images/unconventional.gif

그러나 대신 여기 :

{appname}/unconventional.gif

나는 이것이 철도 컨벤션을 완전히 위반 한 것임을 이해하고, 부도덕하며 어떤 상황에서도 결코 그렇게하지 말아야하며, 왜 그런 어리석은 일을 제안할까요?

좋아, 이제 우리는 내가 창에 있고 상징적 링크가 의문의 여지가 없다고 가정하면, 우리는 그 길을 벗어 났으므로 어떻게 설정할 수 있습니까?

도움이 되었습니까?

해결책

Rails는 이러한 이미지를 제공하지 않으며 웹 서버가 그렇게 할 수 있습니다. 이 시나리오를 처리하기 위해 웹 서버의 구성을 가장 잘 변경했습니다. 사용하는 경우 Apache, 예를 들어, 설정하기가 상당히 쉽습니다. mod_rewrite.

레일을 만드는 것은이 이미지를 제공합니다. ~이다 당신이 당신의 경로를 제공하는 경우 가능합니다 routes.rb 그것은 일치합니다 /public/images/unconventional.gif, 파일 자체가 존재하지 않는 경우. 예를 들어:

map.connect "public/images/unconventional.gif",
  :controller => "static_image_controller",
  :action => "serve"

그런 다음 컨트롤러를 만듭니다 StaticImageController:

class StaticImageController < ApplicationController
  def serve
    image = File.read(File.join(Rails.root, "unconventional.gif"))
    send_data image, :type => "image/gif", :disposition => "inline"
  end
end

경고: 위의 개념을 사용하는 경우 URL에서 입력을 사용하여 서비스 할 파일을 결정하는 경우 params[:file], 예를 들어), 당신은 필요합니다 철저히 전체 파일 시스템을 외부 세계에 노출시킬 위험이 있기 때문에 입력을 소독하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top