Strand in Wyk auf Föhr

Menu:

Gefundene Bugs

FLV-Upload im Safari 3.1

Bei der Programmierung einer Ruby-on-Rails-Anwendung, bei der Nutzer die Möglichkeit haben sollen Dateien hochzuladen, fiel mir ein Fehler in Apples Safari 3.1 Browser auf, der interessanter Weise nur bei FLV-Dateien auftritt (Zumindest nicht bei der sonst ausprobierten: MP3, JPG, PNG, ICO oder DMG).

Nehmen wir im View ein einfaches Upload-Formular:

<% form_tag upload_url, :multipart => true do %>
  <%= file_field('document', 'file') %>
  <%= submit_tag('upload') %>
<% end %>

Die übergebene Datei wird dann im Controller einfach behandelt:

def upload
  @document = Document.new(params[:document])
  if @document.save ... else ... end
end

Im Model wird der Datensatz dann auf folgende Weise zugewiesen:

def file=(file)
  self.data = file.read
  self.name = base_part_of(file.original_filename)
  self.size = file.size
  self.content_type = file.content_type.chomp
end

private

def base_part_of(file)
  File.basename(file).gsub(/[^\w._-]/, '')
end

Dies funktioniert für viele Arten von Dateien ganz ausgezeichnet. Im Firefox sogar bei allen getesteten. Nur der Safari 3.1 ist der unbedingten Meinung, er müsse die Datei, wenn sie den ein FLV-Video ist, als String und nicht als 'multipart/form-data' versenden. Dadurch wirft natürlich gleich die erste Zeile im Model eine Exception.

Lösungsansätze?

Weitere Vorschläge nehme ich gerne entgegen.