Wie realisiere ich einen Bilderupload fuer User-Profile?

Hallo,
ich wuerde sehr gerne in einer Gemeinschaft die Moeglichkeit einbauen
ein Profilbild hochzuladen (keine Restriktionen auf Groesse, Typ etc.,
ganz simple, einfach und schnell).
Ich bin in dieser Aufgabe ganz unbedarft. Das bedeutet, ich weiss nicht:
a. Wie sieht ein Model aus? (Ich gehe davon aus, dass ich nur eine
Verlinkung speichere und das Bild in einem definierten Public Ordner in
meinem Railsverzeichnis kommt?)

b. Wie verarbeite ich einen Upload im Controller? Wie lese ich den Pfad
aus?

c. Im View reicht es mit file_field zu arbeiten?

Ueber Antworten, Hinweise oder Beispiele wuerde ich mich sehr freuen :).
Liebe Gruesse,
Knut

Mein Lieblingsplugin dafür ist paperclip.

http://www.thoughtbot.com/projects/paperclip

Da steht eigentlich alles, was du brauchst.

Tschö,Andreas

Am 20.09.2008 um 10:28 schrieb Knut L.:

Am 20.09.2008 um 11:10 schrieb Andreas Haller:

Mein Lieblingsplugin dafür ist paperclip.

http://www.thoughtbot.com/projects/paperclip

Da steht eigentlich alles, was du brauchst.

Den Paperclip habe ich nie zum laufen gebracht, ein Grund:
Keine verständlichen Tut’s/Dokus.

Viel besser beschrieben ist attachment_fu. Da gibt es auch screencasts
und railscasts…

Probier mal womit du zurecht kommst…

Gruß

Werner L.
Lindenburger Allee 22 - 50931
Köln
0221.8805 635


http://www.webagentur-laude.de

Hallo Knut,
schau Dir attachment_fu an. Ist vielleicht overkill für Deinen
jetzigen Bedarf, aber Du wirst in Zukunft vielleicht öfter Bilder
verarbeiten wollen. Hier lohnt sich eine Einarbeitung auf alle Fälle.
Gruss,
Roman

Am 20.09.2008 um 10:28 schrieb Knut L.:

Roman Sladeczek wrote:

Hallo Knut,
schau Dir attachment_fu an. Ist vielleicht overkill f�r Deinen
jetzigen Bedarf, aber Du wirst in Zukunft vielleicht �fter Bilder
verarbeiten wollen. Hier lohnt sich eine Einarbeitung auf alle F�lle.
Gruss,
Roman

Am 20.09.2008 um 10:28 schrieb Knut L.:

Hallo Roman, Andreas und Werner,
danke fuer eure Antworten :). Ich habe mir Attachment_FU angesehen und
das Tutorial von
http://clarkware.com/cgi/blosxom/2007/02/24#FileUploadFu angesehen.

Leider bekomme ich die Fehlermeldung:
There were problems with the following fields:

Size is not included in the list

Wenn ich einen Upload durchfuehre. Die Size ist im Model definiert mit:
class Mugshot < ActiveRecord::Base

has_attachment :content_type => :image,
:storage => :file_system,
:max_size => 5000.kilobytes

validates_as_attachment

end

Was kann die Fehlermeldung “not included in the list” noch bedeuten?

Im View oder im Controller frage ich die Groesse nicht ab:
View:
<% form_for(:mugshot, :url => { :action => “create”, },
:html => { :multipart => true }) do |f| -%>

Upload A Mugshot: <%= f.file_field :uploaded_data %>

<%= submit_tag 'Create' %>

<% end -%>

Controller:
class MugshotController < ApplicationController
def new
@mugshot = Mugshot.new
end

def create
@mugshot = Mugshot.new(params[:mugshot])
if @mugshot.save
flash[:notice] = ‘Mugshot was successfully created.’
redirect_to mugshot_url(@mugshot)
else
render :action => :new
end
end

end

Roman Sladeczek wrote:

wie groß ist denn das Bild, dass Du hochlädst?

Am 21.09.2008 um 00:39 schrieb Knut L.:

120 KB… vorher 1.2 MB. Habe es verkleinert und auch die Limitierung
auf 500 angepasst fuer den Fall, dass es daran liegt.

wie groß ist denn das Bild, dass Du hochlädst?

Am 21.09.2008 um 00:39 schrieb Knut L.:

Hallo Knut!

Den Fehler kenne ich. Als ich noch unter Windows (jetzt mit Ubuntu)
gearbeitet habe hatte ich den auch. Wenn Du beim Controller in der
Create
und Update Methode den Befehl sleep 3 einbaust sollte es eigentlich
funktionieren.

Beispiel:

def create # bzw. def update
sleep 3

dein code hier

end

Das hilft nur wenn man mit Windows arbeitet. Die genaue Ursache habe ich
gerade nicht im Kopf, aber RoR versucht schon auf die Datei lesend
zuzugreifen, obwohl die noch garnicht fertig geschrieben ist (Windows
ist
da wohl was langsamer g) und findet eine Datei mit der Größe von 0 Bytes
vor. Daher greift bei der Validierung des Models wohl das untere
Dateigrößenlimit von glaube ich mindestens >0 Bytes. Kann mich aber auch
falsch erinnern :slight_smile:

Viel Erfolg, ich hoffe ich konnte helfen.

Gruß
Sven J.

On Sun, Sep 21, 2008 at 12:39:21AM +0200, Knut L. wrote:

schau Dir attachment_fu an. Ist vielleicht overkill f�r Deinen
danke fuer eure Antworten :). Ich habe mir Attachment_FU angesehen
[…]

Salut!

Wenn du das Foto nur für das Profil haben möchtest, und nur ein Foto,
dann musst du dir gar nicht so viel Mühe machen.
Du kannst gravatar.com verwenden. Jemand, der sich bei dir registriert
muss doch sicherlich eine Email-Adresse angeben. Mit dieser Adresse
kannst du dann von gravatar.com ein Bild direkt in deine Seiten
einbauen.

Hier Anleitungen für Rails:
http://en.gravatar.com/site/implement/rails

Gruesse, Rainer

Hi Sven,
danke fuer die Antwort zu so spaeter Stunde :).
Leider hat das nicht funktioniert, aber ich habe es trotzdem mal
eingebaut. Hast recht, habe diesen Punkt noch an vielen anderen Stellen
gesehen.

Ich habe mir den Session-Dump nocheinmal angesehen und etwas komisches
gefunden:
Processing MugshotController#create (for 127.0.0.1 at 2008-09-20
19:58:34) [POST]
Session ID:
BAh7BzoMY3NyZl9pZCIlMGVmNDRmMmE1YTFjNGM1ZTE2MDg4OWVkYzA3NWMx%0AODIiCmZsYXNoSUM6J0FjdGlvbkNvbnRyb2xsZXI6OkZsYXNoOjpGbGFzaEhh%0Ac2h7AAY6CkB1c2VkewA%3D–f0c094380e3fece3c4b4db67f4372dd7cbf3d578
Parameters: {“commit”=>“Create”,
“authenticity_token”=>“fa4c12f8047ff5a92c69a628a19ed0bcbdd9fc92”,
“action”=>“create”, “controller”=>“mugshot”,
“mugshot”=>{“uploaded_data”=>#<File:C:/Users/knut/AppData/Local/Temp/CGI4124-2>}}
2>}}
e[4;36;1mMugshot Columns (0.005000)e[0m e[0;1mSHOW FIELDS FROM
mugshotse[0m
e[4;35;1mSQL (0.001000)e[0m e[0mBEGINe[0m
e[4;36;1mSQL (0.001000)e[0m e[0;1mCOMMITe[0m
Rendering mugshot/new
Completed in 10.49700 (0 reqs/sec) | Rendering: 0.00500 (0%) | DB:
0.00700 (0%) | 200 OK [http://127.0.0.1/mugshot/create]

Das Zielverzeichnis liesst sich irgendwie strange. Normalerweise sollte
die Datei in einem lokalen Verzeichnis abgelegt werden. Allerdings ist
das nirgends definiert. Kann das daran liegen? In der Anleitung stand
nur, dass eine DB-Tabelle erstellt werden sollte…

Knut L. wrote:

Hallo,
ich wuerde sehr gerne in einer Gemeinschaft die Moeglichkeit einbauen
ein Profilbild hochzuladen (keine Restriktionen auf Groesse, Typ etc.,
ganz simple, einfach und schnell).
Ich bin in dieser Aufgabe ganz unbedarft. Das bedeutet, ich weiss nicht:
a. Wie sieht ein Model aus? (Ich gehe davon aus, dass ich nur eine
Verlinkung speichere und das Bild in einem definierten Public Ordner in
meinem Railsverzeichnis kommt?)

b. Wie verarbeite ich einen Upload im Controller? Wie lese ich den Pfad
aus?
[…]

Vielleicht hast Du Zugang zum Buch “RailsSpace” von Michael H. und
Aurelius Prochazka. Deren Loesung funktioniert ganz gut.

Die Autoren verwenden ImageMagick. Du kannst Bilder konvertieren, in der
Groesse anpassen, in der Groesse limitieren, etc. Die Autoren zeigen
auch wie die zugehoerigen Views, Controller, und Model aussehen, sowie
das Handling von Thumbnails. Die Bilder werden in einem
Rails-Verzeichnis gespeichert.

Gruesse,
Manfred.

Manfred Lange.
Agile Utilities NZ Ltd.
http://www.agileutilities.com

Hey Knut,

passend zu Manfred kann ich nur ergänzen:

http://www.railsspace.com/book

Dort ist der komplette Quellcode der Übungen aus dem Buch, den
du dir runterladen kannst.

Viele
Grüße,
Daniel

Am 25.09.2008 um 08:20 schrieb Manfred Lange:

Hey danke, das mit dem Rezise muss ich mir noch einmal genau anschauen
:).

Ansonsten habe ich es vorhin zum laufen geschafft, indem ich
validates_as_attachment auskommentiert habe… ;).
Liebe Gruesse,
Knut

Daniel Boekhoff wrote:

Hey Knut,

passend zu Manfred kann ich nur erg�nzen:

Railsspace.com is for sale | HugeDomains

Dort ist der komplette Quellcode der �bungen aus dem Buch, den
du dir runterladen kannst.

Viele
Gr��e,
Daniel

Am 25.09.2008 um 08:20 schrieb Manfred Lange: