2009-11-08 2 views
4

를 사용하여 JPG 파일을 보낼 수 있도록하고, 공공/images 폴더에없는 JPG 파일 다운로드하십시오 :제가 모두 표시 내 html.erb에서 다음 태그를 사용하고 SEND_DATA

<%= image_tag retrieve_photo_path(@photo) %> 
<%= link_to "Download Photo", download_photo_path(@photo) %> 

을 내 컨트롤러 코드는 다음과 같습니다 :

def retrieve 
    @photo = Photo.find(params[:id]) 
    send_data File.read(@photo.abs_filepath), :type = "image/jpeg", :disposition => "inline" 
end 

def download 
    @photo = Photo.find(params[:id]) 
    send_file @photo.abs_filepath, :type = "image/jpeg", :filename => @photo.filename 
end 

다운로드 링크는 완벽하게 작동하지만 이미지 태그에는 빨간색 x (깨진 이미지)가 표시됩니다. 내가 뭘 놓치고 있니? WinXP에서 InstantRails를 사용하고 Rails 2.3.4와 Ruby 1.8.6으로 업데이트했습니다.

+0

는 "retreive"행동 요청에 대한 서버 로그 또는 출력을 확인합니다. 이 오류 메시지는 사용자가 쉽게 파악할 수있는 오류 메시지를 찾을 수 있습니다. – nicholaides

+0

img 요청을 처리하기 위해 "www.mytestapp.com/photos/3/retrieve"라는 URL을 내 브라우저 (IE)에 직접 입력하면 빨간색 x 깨진 이미지가 표시되고 apache access.log에는 다음과 같은 내용이 있습니다 항목 : "GET/photos/3/HTTP/1.1 검색"304 0 상태 코드 304의 의미는 누구에게도 도움이 될 수 있습니까? – user206481

+0

아파치 캐싱과 관련이있는 것처럼 보입니다.하지만 익숙하지 않습니다. 도와주세요! – user206481

답변

9

파일 데이터를 제대로 읽지 못하는 경우 먼저 파일을 열어야합니다. 다음과 같이

retrieve 수정 작업 :

def retrieve 
    @photo = Photo.find(params[:id]) 
    File.open(@photo.abs_filepath, 'rb') do |f| 
    send_data f.read, :type => "image/jpeg", :disposition => "inline" 
    end 
end 
+0

할렐루야! 그거였다! 흥미로운 나는 오류 메시지를받지 못했다. – user206481

+0

대단히 감사합니다! – user206481

관련 문제