Datei (kein Bild) Upload/Download


#1

Hallo zusammen,

ich bin RoR-Anfänger und war heute den Ganzen Tag auf der Suche nach
einem Tutorial, wie ich eine Datei in einer Datenbank speichere und
wieder zum Download bereit stelle. Leider bezog sich alles was ich
gefunden habe auf Bilder (in der Regel mit attachment_fu), was ich
inzwischen bei mir installiert habe. Die Umsetzung für eine nicht
Bild-Datei bekomme ich leider nicht hin.

Ich bräuchte eine Anleitung für folgendes Scenarium:
Tabelle mit 5 String-Feldern und einem BLOB-Feld (Alles mit scaffold und
db:migrat angelegt). Die Datei die hoch geladen werden soll ist eine
.bin-Datei und max. 40KB groß. Auf der NEW-Seite möchte ich die Datei
hoch laden und auf der Index-Seite zum Download anbieten.

Danke schon mal, für eure Mühe
Dieter


#2

On Wednesday 01 April 2009, Dieter S. wrote:

Hallo zusammen,

ich bin RoR-Anfänger und war heute den Ganzen Tag auf der Suche nach
einem Tutorial, wie ich eine Datei in einer Datenbank speichere und
wieder zum Download bereit stelle. Leider bezog sich alles was ich
gefunden habe auf Bilder (in der Regel mit attachment_fu), was ich
inzwischen bei mir installiert habe. Die Umsetzung für eine nicht
Bild-Datei bekomme ich leider nicht hin.

Ob Bild oder sonstwas spielt eigentlich keine Rolle. Als Alternative zu
Attachment_fu gibt es noch Paperclip, vielleicht ist das eher nach
deinem Geschmack

http://railscasts.com/episodes/134-paperclip

Michael


Michael S.
mailto:removed_email_address@domain.invalid
http://www.schuerig.de/michael/


#3

Bild oder nicht Bild ist sicher egal: Aber die Anforderung, die Datei
in der Datenbank abzulegen, wird so ohne weiteres weder von paperclip
noch von attachment_fu implementiert: Die meisten legen ihre
hochgeladenen Dateien irgendwo im Filesystem(auf auf Amazons S3) ab
und lassen dann z.B. Apache mit x-sendfile diese Dateien streamen.
(eine Diskussion Blobs vs. Filesystem gibt’s z.B. hier
http://stackoverflow.com/questions/57104/rails-binary-stream-support)
.

Wenn die Bilder also unbedingt in der Datenbank landen sollen, dann
muss man da wohl in einem after_save das file nehmen und in die
Datenbank streamen: Wenn ich das richtig überblicke, dann ist es hier
mit einem einfachen save nicht getan… Dazu gibt es zumindest mit
mysql einen Haufen Probleme mit blobs (Tabellen und backups werden
langsam usw.) - wenn Dateien also nicht unbedingt in der Datenbank
liegen sollen, dann würde ich sie vielleicht wirklich im Dateisystem
liegen lassen… Oder hat das schon mal jemand gemacht und ist damit
glücklich geworden?!

GrüßeStefan

Am 01.04.2009 um 02:07 schrieb Michael S.:

Ob Bild oder sonstwas spielt eigentlich keine Rolle. Als Alternative
mailto:removed_email_address@domain.invalid
http://www.schuerig.de/michael/


rubyonrails-ug mailing list
removed_email_address@domain.invalid
http://mailman.headflash.com/listinfo/rubyonrails-ug


stefan frank


software&service
weberstr. 10
69120 heidelberg
tel. +49 (0) 6221 7277049
mobil +40 (0) 173 2383390
mail removed_email_address@domain.invalid


#4

Stefan F. wrote:

Bild oder nicht Bild ist sicher egal: Aber die Anforderung, die Datei
in der Datenbank abzulegen, wird so ohne weiteres weder von paperclip
noch von attachment_fu implementiert: Die meisten legen ihre
hochgeladenen Dateien irgendwo im Filesystem(auf auf Amazons S3) ab
und lassen dann z.B. Apache mit x-sendfile diese Dateien streamen.
(eine Diskussion Blobs vs. Filesystem gibt’s z.B. hier
http://stackoverflow.com/questions/57104/rails-binary-stream-support)
.

Wenn die Bilder also unbedingt in der Datenbank landen sollen, dann
muss man da wohl in einem after_save das file nehmen und in die
Datenbank streamen: Wenn ich das richtig �berblicke, dann ist es hier
mit einem einfachen save nicht getan… Dazu gibt es zumindest mit
mysql einen Haufen Probleme mit blobs (Tabellen und backups werden
langsam usw.) - wenn Dateien also nicht unbedingt in der Datenbank
liegen sollen, dann w�rde ich sie vielleicht wirklich im Dateisystem
liegen lassen… Oder hat das schon mal jemand gemacht und ist damit
gl�cklich geworden?!

Gr��eStefan

Am 01.04.2009 um 02:07 schrieb Michael S.:

Ob Bild oder sonstwas spielt eigentlich keine Rolle. Als Alternative
mailto:removed_email_address@domain.invalid
http://www.schuerig.de/michael/


rubyonrails-ug mailing list
removed_email_address@domain.invalid
http://mailman.headflash.com/listinfo/rubyonrails-ug


stefan frank
vierundsechzig.de
software&service
weberstr. 10
69120 heidelberg
tel. +49 (0) 6221 7277049
mobil +40 (0) 173 2383390
mail removed_email_address@domain.invalid
www.vierundsechzig.de

Laut Beschreibung von attachment_fu ist das Ablegen der Datei in einer
Datenbank (bei mir übrigens Oracle) kein Problem. Das Für und Wieder, ob
ich die Datei in der Datenbank ablege hab ich mir lange überlegt. Aus
sicherungstechnischen Gründen und der geringen Größe von max. 10KB habe
ich mich für die Datenbank entschieden.

Dieter


#5

Michael S. wrote:

On Wednesday 01 April 2009, Dieter S. wrote:

Hallo zusammen,

ich bin RoR-Anf�nger und war heute den Ganzen Tag auf der Suche nach
einem Tutorial, wie ich eine Datei in einer Datenbank speichere und
wieder zum Download bereit stelle. Leider bezog sich alles was ich
gefunden habe auf Bilder (in der Regel mit attachment_fu), was ich
inzwischen bei mir installiert habe. Die Umsetzung f�r eine nicht
Bild-Datei bekomme ich leider nicht hin.

Ob Bild oder sonstwas spielt eigentlich keine Rolle. Als Alternative zu
Attachment_fu gibt es noch Paperclip, vielleicht ist das eher nach
deinem Geschmack

http://railscasts.com/episodes/134-paperclip

Michael


Michael S.
mailto:removed_email_address@domain.invalid
http://www.schuerig.de/michael/

Das Attachment_fu schein schon zu passen. Ich bräuchte nur eine
Anleitung wie ich das für eine .bin-Datei umsetzen kann und wie ich das
in meinen bestehenden Controller einbaue. Brauche ich denn immer diese
Hilfstabelle und müssen alle Werte gefüllt sein?

Dieter


#6

in der README für attachment_fu findest du doch haufenweise beispiele:

Examples:
has_attachment :max_size => 1.kilobyte
has_attachment :size => 1.megabyte…2.megabytes
has_attachment :content_type => ‘application/pdf’
has_attachment :content_type => [‘application/pdf’, ‘application/
msword’, ‘text/plain’]
has_attachment :content_type => :image, :resize_to => [50,50]
has_attachment :content_type => [‘application/
pdf’, :image], :resize_to => ‘x50’
has_attachment :thumbnails => { :thumb => [50, 50], :geometry =>
‘x50’ }
has_attachment :storage => :file_system, :path_prefix => ‘public/
files’
has_attachment :storage => :file_system, :path_prefix => ‘public/
files’,
:content_type => :image, :resize_to =>
[50,50], :partition => false
has_attachment :storage => :file_system, :path_prefix => ‘public/
files’,
:thumbnails => { :thumb => [50, 50], :geometry =>
‘x50’ }
has_attachment :storage => :s3

 :storage          # Specifies the storage system to use..
                   # Defaults to :db_file.  Options

are :file_system, :db_file, and :s3.

also einfach in das model was ein attachment haben soll:

 has_attachment :content_type => 'text/plain'

gruß
manuel

Am 01.04.2009 um 14:28 schrieb Dieter S.:


#7

Laut Beschreibung von attachment_fu ist das Ablegen der Datei in
einer
Datenbank (bei mir übrigens Oracle) kein Problem. Das Für und
Wieder, ob
ich die Datei in der Datenbank ablege hab ich mir lange überlegt. Aus
sicherungstechnischen Gründen und der geringen Größe von max. 10KB
habe
ich mich für die Datenbank entschieden.

oops, ja, tatsächlich: das hatte ich bei attachment_fu übersehen, dass
das geht. Und es gibt auch einen paperclipfork, der die Dateien in die
Datenbank schreibt:
http://github.com/patshaughnessy/paperclip/tree/master
bzw. http://patshaughnessy.net/paperclip-database-storage)


#8

Manuel W. wrote:

in der README für attachment_fu findest du doch haufenweise beispiele:

Examples:
has_attachment :max_size => 1.kilobyte
has_attachment :size => 1.megabyte…2.megabytes
has_attachment :content_type => ‘application/pdf’
has_attachment :content_type => [‘application/pdf’, ‘application/
msword’, ‘text/plain’]
has_attachment :content_type => :image, :resize_to => [50,50]
has_attachment :content_type => [‘application/
pdf’, :image], :resize_to => ‘x50’
has_attachment :thumbnails => { :thumb => [50, 50], :geometry =>
‘x50’ }
has_attachment :storage => :file_system, :path_prefix => ‘public/
files’
has_attachment :storage => :file_system, :path_prefix => ‘public/
files’,
:content_type => :image, :resize_to =>
[50,50], :partition => false
has_attachment :storage => :file_system, :path_prefix => ‘public/
files’,
:thumbnails => { :thumb => [50, 50], :geometry =>
‘x50’ }
has_attachment :storage => :s3

 :storage          # Specifies the storage system to use..
                   # Defaults to :db_file.  Options

are :file_system, :db_file, and :s3.

also einfach in das model was ein attachment haben soll:

 has_attachment :content_type => 'text/plain'

gruß
manuel

Am 01.04.2009 um 14:28 schrieb Dieter S.:

Hallo Manuel,

für mich als Anfänger ist das nicht so einfach wie du das darstellst.
Z.B. brauche ich diese Zwischentabelle? Wo gebe ich an, in welcher
Tabelle/Feld die Datei letzten Endes gespeichert wird? Wie sieht der
Link aus, mit dem ich die Datei wieder downloaden kann? Wie kann ich das
in meinen bestehenden Controller/Modell einbinden? Desshalb bin ich auf
der Suche nach einem entsprechenden Tutorial.
Vielleicht hast du ja die Muse, mir da was zu erstellen.

Gruß
Dieter


#9

der Suche nach einem entsprechenden Tutorial.
Vielleicht hast du ja die Muse, mir da was zu erstellen.

Gruß
Dieter

Posted via http://www.ruby-forum.com/.


rubyonrails-ug mailing list
removed_email_address@domain.invalid
http://mailman.headflash.com/listinfo/rubyonrails-ug

Ich glaube auf die entsprechenden railscasts hatte Manuel schon
hingewiesen:

Entweder Paperclip (etwas neuer, einfacher im Handling, aber blobs nur
in einem fork):
http://railscasts.com/episodes/134-paperclip

Es gab auch mal einen railscast zu attachment_fu, aber der ist nicht
mehr online…: Aber hier ist ein tutorial dazu:
http://www.practicalecommerce.com/blogs/post/432-Multiple-Attachments-in-Rails

und googlen bringt sicher noch ein paar weitere zu Tage… Aber der
Trend geht wohl eher zu paperclip, das ist einfacher im Handling/Testen.

grüße
Stefan


#10

Am 02.04.2009 um 17:23 schrieb Dieter S.:

Hallo Dieter…
also für attachment_fu und paperclip gibt es genügend tuts.
google mal nach: rails paperclip

Sicher ist es zu Anfang überhaupt nicht einfach die ganzen
Zusammenhänge zu verstehen, da rails eben ein anderes Konzept als z.B.
php hat.

Ich würde dir raten einfach so ein Tut von a-z abzuarbeiten dann wird
vieles klar und anschließend dann auf deine Umgebung anzupassen.

Gruß
Werner

Am 01.04.2009 um 14:28 schrieb Dieter S.:

Hallo Manuel,

für mich als Anfänger ist das nicht so einfach wie du das darstellst.
Z.B. brauche ich diese Zwischentabelle?

Zwischentabelle? was ist das…?

Wo gebe ich an, in welcher
Tabelle/Feld die Datei letzten Endes gespeichert wird?

Wie sieht der
Link aus, mit dem ich die Datei wieder downloaden kann? Wie kann ich
das
in meinen bestehenden Controller/Modell einbinden?

indem du dieses Model (und damit die db Tabelle )in deinem Controller
ansprichst…

z.B.

class BookingsController < ApplicationController

def new_booking
@booking = Booking.new
@seminar = Seminar.find_by_id(params[:id])

Am besten ein Buch kaufen und lesen…für die Basics

Die neue Bibel ist gerade erschinen und sehr gut lesbar, nicht so ein
typisch deutscher Informatik Schinken

Agile Webdevelopment with Rails
BuchVersion 3.0
da steht wirklich fast alles wesentliche drin.

Gruß

http://mailman.headflash.com/listinfo/rubyonrails-ug
Werner L.
removed_email_address@domain.invalid


#11

Werner L. wrote:

Am 02.04.2009 um 17:23 schrieb Dieter S.:

Hallo Dieter…
also f�r attachment_fu und paperclip gibt es gen�gend tuts.
google mal nach: rails paperclip

Sicher ist es zu Anfang �berhaupt nicht einfach die ganzen
Zusammenh�nge zu verstehen, da rails eben ein anderes Konzept als z.B.
php hat.

Ich w�rde dir raten einfach so ein Tut von a-z abzuarbeiten dann wird
vieles klar und anschlie�end dann auf deine Umgebung anzupassen.

Gru�
Werner

Am 01.04.2009 um 14:28 schrieb Dieter S.:

Hallo Manuel,

f�r mich als Anf�nger ist das nicht so einfach wie du das darstellst.
Z.B. brauche ich diese Zwischentabelle?

Zwischentabelle? was ist das…?

Wo gebe ich an, in welcher
Tabelle/Feld die Datei letzten Endes gespeichert wird?

Wie sieht der
Link aus, mit dem ich die Datei wieder downloaden kann? Wie kann ich
das
in meinen bestehenden Controller/Modell einbinden?

indem du dieses Model (und damit die db Tabelle )in deinem Controller
ansprichst…

z.B.

class BookingsController < ApplicationController

def new_booking
@booking = Booking.new
@seminar = Seminar.find_by_id(params[:id])

Am besten ein Buch kaufen und lesen…f�r die Basics

Die neue Bibel ist gerade erschinen und sehr gut lesbar, nicht so ein
typisch deutscher Informatik Schinken

Agile Webdevelopment with Rails
BuchVersion 3.0
da steht wirklich fast alles wesentliche drin.

Gru�

http://mailman.headflash.com/listinfo/rubyonrails-ug
Werner L.
removed_email_address@domain.invalid

Hallo Werner,

ich denke, ich werde es mal mit Paperclip versuchen, wenn’s einfacher
sein soll.
Und ich denke, ein Tutorial außerhalb meines Projekts einmal
durchspielen kann nicht schaden.

Zum Thema Buch: 2 Bücher bin ich schon durch. Zu meinem Problem steht da
nur so was wie: benutzen sie am besten attachment_fu. Nicht wirklich
hilfreich.
In eine ältere Version von “Agile Webdevelopment with Rails” hab ich
online mal reingeschaut, das sah nicht schlecht aus. Werde mir mal die
aktuelle Version zulegen.

Für’s erste war es dann hier für mich. Sobald ich mein Problem gelöst
habe, nehm ich mich mal einem Tutorial über dieses Thema an.

Gruß
Dieter


#12

Hätte ich fast vergessen, Danke für die vielen Antworten.

Gruß
Dieter