BUG - content_type assignment case sensitive

I sent my original post to this group under the title "Is mime content type case sensitive". It's made it to page 3 and I think I've found a bug so I'm re-posting.

I have a very simple example that uses one of the attachment plugins to upload jpeg image files, creating thumbs on the way to storing all on the filesystem.

From the attachment_fu test:

mugshots_controller.rb has:

  def index     @mugshots = Mugshot.find(:all,                              :conditions => {:thumbnail => nil})

    respond_to do |format|       format.html # index.html.erb       format.xml { render :xml => @mugshots }     end   end

views/mugshots/index.html.erb:

<h1>Most Wanted</h1> <% for mugshot in @mugshots -%>   <%= link_to image_tag(mugshot.public_filename(:thumb)),       mugshot.public_filename %> <% end -%> <p>   <%= link_to('New shot', { :action => 'new' }) %> </p>

mugshot.rb:

class Mugshot < ActiveRecord::Base   has_attachment :content_type => :image,                  :storage => :file_system,                  :size => 0..3.megabytes,                  :resize_to => '640x480>',                  :thumbnails => { :thumb => '100x100>' }

  validates_as_attachment

end

..._create_mugshots.rb:

class CreateMugshots < ActiveRecord::Migration   def self.up     create_table :mugshots do |t|       t.column :parent_id, :integer       t.column :content_type, :string       t.column :filename, :string       t.column :thumbnail, :string       t.column :size, :integer       t.column :width, :integer       t.column :height, :integer

      t.timestamps     end   end

  def self.down     drop_table :mugshots   end end

I added two images, "DSCN0925.jpg" and "DSCN0913.JPG" through the application. The unix file command for these images tells me:

DSCN0913.JPG: JPEG image data, EXIF standard 2.2 DSCN0925.jpg: JPEG image data, EXIF standard 2.2

And, using script/console, Mugshot.find(:all) gives:

Mugshot.find(:all)

=> [#<Mugshot id: 1, parent_id: nil, content_type: "image/jpeg", filename: "DSCN0925.jpg", thumbnail: nil, size: 818302, width: 640, height: 479, created_at: "2009-04-29 19:01:17", updated_at: "2009-04-29 19:01:17">, #<Mugshot id: 2, parent_id: 1, content_type: "image/jpeg", filename: "DSCN0925_thumb.jpg", thumbnail: "thumb", size: 75300, width: 100, height: 75, created_at: "2009-04-29 19:01:18", updated_at: "2009-04-29 19:01:18">, #<Mugshot id: 3, parent_id: nil, content_type: "image/jpeg", filename: "DSCN0913.JPG", thumbnail: nil, size: 833312, width: 640, height: 479, created_at: "2009-04-29 19:01:48", updated_at: "2009-04-29 19:01:48">, #<Mugshot id: 4, parent_id: 3, content_type: "image/jpeg", filename: "DSCN0913_thumb.JPG", thumbnail: "thumb", size: 162513, width: 100, height: 75, created_at: "2009-04-29 19:01:49", updated_at: "2009-04-29 19:01:49">]

NOTE: content_type for all four records is image/jpeg.

Observing the headers associated with a load of the view/mugshots/ index.html.erb view with Live HTTP gives:

\> NOTE: the content_type associated with .jpg is image/jpeg

NOTE: the content_type associated with .JPG is text/plain

This difference causes Firefox to identify all .JPG files as "JPEG Picture" rather than "image/jpeg...", resulting in different behavior in the browser when the "link_to" link is followed.

Where should I take this problem?

Well if it is a rails problem, I'd post to the rails core list. Are you sure it is though? who serves up that image (ie does the request for bla/.../foo.JPG go through rails at all ? if it doesn't it can hardly be rails' fault). You may find that it is actually thin mis- reporting the content-type (and i'm pretty sure there's no way it checks in the database to see what the content_type of the file is).

Fred

Hello Frederick,

Here's how I've tested

Ruby 1.8.7 (2008-08-11 patchlevel 72) [powerpc-darwin9.6.0] Rails 2.3.2 Webrick Thin 1.0.0 Mongrel 1.1.5 rmagick 2.9.1 ImageMagick 6.5.1 attachment_fu - current version paperclip - current version

and

Ruby 1.9.2dev (2009-04-25 trunk 23281) [powerpc-darwin9.6.0] Rails 2.3.2 Webrick Thin 1.0.0 rmagick 2.9.1 ImageMagick 6.5.1 attachment_fu - current version paperclip - current version

In all cases I'm running in the development environment on a single machine - OSX 10.5.6 ppc.

So as near as I can tell, when I browse my Rails app at localhost:3000 the data path is, with the exception of the *magick and browser, all in the RoR world. I'm really not clear how the whole Ruby/Rails/Rack/ [Thin, Webrick, Mongrel] thing hangs together so I can't get any closer to whose problem it is, really.

I'm particularly troubled by the following:

1) attachment_fu and paperclip have no problem identifying both .jpg and .JPG as image/jpeg content_type and this information is stored in the database.

2) the Unix file command, looking at the files magic numbers, correctly identify both files as the same type - JPEG EXIF 2.2.

3) The "from" end image in the view's link_to displays correctly. In fact, I've checked this by using the full image at the from end pointing at itself on the to end.

4) Somewhere between the "click the link" and the "display the image" code is looking at the file name extension and assigning the content_type (incorrectly) based on case.

rick

Rails doesn't usually serve static content like images. have you tried switching between different webservers (thin, webrick, mongrel etc.) ?

Fred