2009-11-08 52 views
4

我用我的html.erb下面的標籤都顯示發送jpg文件,並下載一個JPG文件,是不是在公共/ images文件夾:請幫我用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 2009-11-08 23:54:10

+0

如果我直接在我的瀏覽器(IE)中輸入網址「www.mytestapp.com/photos/3/retrieve」以模擬img請求,我就會得到紅色的x碎片圖像 - 而我的apache access.log有以下條目: 「GET/photos/3/retrieve HTTP/1.1」304 0 任何人都可以幫忙瞭解狀態碼304的含義嗎? – user206481 2009-11-09 01:03:46

+0

看起來它與Apache緩存有關,但我對此一點也不熟悉 - 請幫助! – user206481 2009-11-09 01:18:14

回答

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

hallelujah!就是這樣!有趣的是,我沒有收到錯誤消息。 – user206481 2009-11-09 01:38:22

+0

非常感謝! – user206481 2009-11-09 01:38:57