2012-12-31 82 views
2

我使用Ruby 1.93和Rails 3.2,並嘗試使用函數send_datasend_file發送圖片。目前我使用WebBrick作爲開發服務器。Ruby On Rails:使用send_data/send_file發送大圖片導致錯誤

在這兩種情況下,只要圖片小於330kB,它就可以正常工作。但是當圖片變得更大(比如說1MB)時,Firefox,Maxthon和IE都停止顯示圖像,Firefox說圖片包含錯誤。

我下載了損壞的圖片文件,並將文件大小與原始圖片進行了比較。在大圖片上,文件大小大約增加400個字節。

這裏有一些代碼塊的嘗試:

send_data img.to_blob, :stream => 'false', :filename => 'test.jpg', :type => 'image/jpg', :disposition => 'inline' 

send_data(img.to_blob, :filename => "test.jpg") 

send_file('C:\WebProjects\RubyTest\public\data\pic3_3.jpg' , :disposition => 'inline') 

File.open('C:\WebProjects\RubyTest\public\data\pic3_3.jpg', 'rb') do |f| 
    send_data f.read, :type => "image/jpeg", :disposition => "inline" 
end 

有趣的是,與有關損壞的圖像和黑莓PlayBook一個更大的文件,火狐,傲遊和IE的抱怨是可以顯示圖片。另一方面,Playbook遇到了其他瀏覽器正確顯示的較小圖片的問題。

btw .to_blob是一個RMagick函數,它返回一個二進制對象。但RMagick似乎正常工作。

+0

粘貼您的視圖代碼。 –

+0

只是一個預感,但您可能需要檢查文件中的實際數據,尤其是文件的最後400個字節,以查找可能的錯誤字符串。我懷疑額外的400個字節可能是一個錯誤信息。 – Casper

+0

@Casper:我比較了原始圖片文件和Maxthon下載的圖片文件。我發現原始圖片的最後68174個字節位於文件的開頭,甚至在HTTP頭之前。額外的字節是現在位於早期發送的數據塊和圖片正常開始之間的HTTP標頭。現在位於文件開頭的68174個字節在最後缺失。 – bebo

回答