Uploading files in the AgileDev book?

The Agile Development book uses the following code to turn a file name
string into something that can be read as a file:

class Picture<ActiveRecord::Base
def picture=(picture_field)
self.name=base_part_of(picture_field.original_filename)
self.content_type=picture_field.content_type.chomp
self.data=picture_field.read
end

def base_part_of(file_name)
name=File.basename(file_name)
name.gsub(/[^\w._-]/,’’)
end
end

Can anyone explain what’s going on here? Where is original_filename
defined? Is there a less obscure way to perform a read on a filename
that refers to a file on the visitor’s disk?