# file upload problem mit spring



## hamid (11. Aug 2010)

Hallo ich habn problem mit der umsetzung des fileuploads.

mein formular besteht aus form tags aber es gibt leider kein <form:file.. und somit hab ichn problem mit dem speichern der datei in meine datenbank.


kennt jemand ne lösung?

danke


----------



## XHelp (11. Aug 2010)

Ja was denn nun? Datei hochladen, die Form erstellen oder eine Datei in der Datenbank speichern?
Du kannst ja den input-tag ja auch per Hand setzen.
Ansonsten hilft dir vllt 16.8Spring's multipart (fileupload) support weiter


----------



## hamid (11. Aug 2010)

ich hab probleme die datei in die datenbank zu speichern ! 


mein formular besteht aus form tags und es gibt kein tag <form:file oder so..

wie kann man sowas lösen?


was meinst du mit? "Du kannst ja den input-tag ja auch per Hand setzen."


----------



## Gelöschtes Mitglied 5909 (12. Aug 2010)

Na so wie es in dem link oben steht


```
<form method="post" action="upload.form" enctype="multipart/form-data">
            <input type="file" name="file"/>
            <input type="submit"/>
        </form>
```


----------



## hamid (13. Aug 2010)

Hallo rail.

danke für deine antwort aber ich kann das so nicht benutzen , weil ich mit Spring Framework arbeite und Form Tags benutze wie

<form:input...    anstatt   <input type="file" name="file"/>

ich kann das sonst nicht auswerten



eine andere lösung?


----------



## Tomate_Salat (13. Aug 2010)

XHelp hat gesagt.:


> Ansonsten hilft dir vllt 16.8Spring's multipart (fileupload) support weiter



... den Link hast du dir offensichtlich nicht angeschaut


----------



## hamid (13. Aug 2010)

eigentlich will ich nix uploaden sonder einfach bilder in meine DB speichern. ich weiss jetzt nicht in wie weit mir das helfen kann....

was meinst du?


----------



## Tomate_Salat (13. Aug 2010)

ähm, ich glaube hier weis absolut keiner was du machen willst!

Willst du eine Datei hochladen?
Du schreibst was von Bilder, existieren die auf dem Server und sollen nur die Pfade gespeichert werden?
Sollen die Bilder hochgeladen werden?

Du widersprichst dir in jedem Post, so dass hier wohl niemand sagen kann, was du vorhast!


----------



## hamid (13. Aug 2010)

also ich hab ein formular mit input felder und unten ein feld um ein foto in meine db zu speichern. das ist alles.

mein hauptproblem ist das ich mit spring arbeite und form tags benutze wie <form:input usw

es existiert nur leider kein <form:file oder sowas in der richtung....

ich kann auch schlecht <input type="file"... benutzen da ich sonst probleme mit mein controller bekomme.

jetzt such ich nach eine lösung


----------



## Tomate_Salat (13. Aug 2010)

Nein so kommen wir nicht weiter!

Ich könnte meine Post von vorhin wieder hinschreiben. Beantworte einfach folgende frage:

Soll der Benutzer ein Bild hochladen und mit ihm verknüpft werden?

oder Soll der Benutzer ein Bild auswählen, dass bereits auf dem Server existent ist?


btw: [c]<input type="file"...[/c] ist für einen Dateiupload, den du aber nach eigener Aussage nicht brauchst, vllt ist jz auch unsere verwirrung klar.


----------



## hamid (13. Aug 2010)

der benutzer wählt ein foto aus das auf sein rechner exisitiert und drück dann auf absenden und schwuppsss...ist dieses foto in der DB drin.

besser jetzt?


----------



## Tomate_Salat (13. Aug 2010)

Also brauchst du doch einen upload, aber ich glaube du hast die umsetzung nicht richtig verstanden. Zuerst lädst du das Bild hoch, hilfe findest du hier:


XHelp hat gesagt.:


> 16.8Spring's multipart (fileupload) support


wenn der upload erfolgreich war, nimmst du den Pfad des Bildes uns speicherst diesen in der Datenbank beim Benutzer.


----------



## hamid (13. Aug 2010)

versteh das hochladen nicht ! ich möchte ja nix uploaden sondern direkt in die DB rein bei mir.

oder passiert das alles in einem schritt? oder versteh ich das vielleicht doch nicht


----------



## Tomate_Salat (13. Aug 2010)

wie stellst du dir denn das vor?! Das Bild muss ja auf deinen Server. Und dann speicherst du das bild nicht in der Datenbank sondern iwo auf deinem Server. In der Datenbank speicherst du nur den Pfad zum Bild.


----------



## maki (13. Aug 2010)

> ich möchte ja nix uploaden sondern direkt in die DB rein bei mir.


Falsch.
Erst hochladen, dann Speichern.



> oder versteh ich das vielleicht doch nicht


Richtig.

Doku lesen hilft 

Da dein Thread im WebTier Unterforum ist, geht es hier erstmal um das hochladen, der Link zur Doku wurde ja schon gepostet.


----------



## hamid (13. Aug 2010)

mm..glaub das stimmt nicht so ganz.

ich möchte schon das bild selbst in meine DB speichern. deswegen hab ich auch ein typ BLOB in meine DB. ich möchte also keinen pfad speichern sondern wirk das objekt selbst.

ich möchte auch nix uploaden. ich arbeite zZ lokal


----------



## maki (13. Aug 2010)

> mm..glaub das stimmt nicht so ganz.


Doch, das stimmt.

Was nicht stimmt ist dein Wissensstand für diese Aufgabe, da solltest du mehr lesen.


----------



## hamid (13. Aug 2010)

aber es ist doch korrekt das man direkt ein foto in die DB speichern kann oder etwa nicht? und genauso möchte ich das machen. 

was habe ich das verpasst? ich will keine pfade in die DB speichern.


----------



## Tomate_Salat (13. Aug 2010)

hamid hat gesagt.:


> aber es ist doch korrekt das man direkt ein foto in die DB speichern kann oder etwa nicht?



*NEIN* du könntest den Code vom foto speichern, aber sowas macht man nicht!


----------



## hamid (13. Aug 2010)

wozu gibt es dann den datentyp BLOB? damit kann ich doch binäre daten in eine DB speichern.


----------



## Tomate_Salat (13. Aug 2010)

aber man speichert doch keine fotos in der Datenbank. Woher hast du das überhaupt?

Was spricht dagegen, das Foto in einem Ordner zu speichern und den Pfad in der Datenbank abzulegen?!


----------



## hamid (13. Aug 2010)

ok mal angenommen ich benutze den link den du mir geschickt hast...

das würde mir aber irgendwie nicht helfen da wieder nicht mit form tag gearbeitet wird sondern mit normales HTML (<input type=file..)

stehe dann wieder vor mein problem am anfang


----------



## maki (13. Aug 2010)

1. Dein Problem von Anfang existiert nciht, zumindest zeigst du keine Fehlermeldung 
2. Man kann Bilder sowohl inder DB als auch im Filesystem spewichern, DB ist "proffessioneller", hat aber Haken.
3. Egal wie, die Datei muss erstmal auf den Server hochgeladen werden (Upload).


----------



## Tomate_Salat (13. Aug 2010)

Eine Datenbank ist eine Datenbank, ist eine Datenbank, ist eine Datenbank. Und keine Bildbank.

Im Webbereich haben imho Bilder garnichts in der DB verloren. Ich sehe auch keine wirkliche notwendigkeit, diese überhaupt in der Datenbank zu speichern.


----------



## maki (13. Aug 2010)

Tomate_Salat hat gesagt.:


> Eine Datenbank ist eine Datenbank, ist eine Datenbank, ist eine Datenbank. Und keine Bildbank.
> 
> Im Webbereich haben imho Bilder garnichts in der DB verloren. Ich sehe auch keine wirkliche notwendigkeit, diese überhaupt in der Datenbank zu speichern.


Die PHP FAQ ist keine akademische Quelle 
Selbst in deinem Link wird nicht generell gesagt "Bilder haben nix in der DB verloren", sondern ein klares "es kommt darauf an".

Transaktionssicherheit, Referentielle Integrität, Clusterfähigkeit, all das gibt man auf wenn man Bilder im Dateisystem speichert, eben die "Enterprise".
Wer hat schon Lust einen backgroundjob zu schreiben der die Leichen (unreferenzierte Bilder) sucht?


----------



## Tomate_Salat (13. Aug 2010)

Mir geht es dabei nicht um die PHP-Punkte in dem Post. Und Leichen kann man vorbeugen, z.B: ein Benutzerbild kannst du immer nach dem Benutzer bennen, macht er einen upload, ersetzte das alte...

wenn du eine Galerie hast, haste auch verweise auf die Bilder, die kannst du so auch rauslöschen.



maki hat gesagt.:


> Selbst in deinem Link wird nicht generell gesagt "Bilder haben nix in der DB verloren", sondern ein klares "es kommt darauf an".



Klar gibt sicher punkte die ich gerade nicht berücksichtige, aber die Punkte die ich im Kopf habe, benötigen nicht zwingend eine DB als speicherort.


----------



## maki (13. Aug 2010)

Tomate_Salat hat gesagt.:


> Mir geht es dabei nicht um die PHP-Punkte in dem Post. Und Leichen kann man vorbeugen, z.B: ein Benutzerbild kannst du immer nach dem Benutzer bennen, macht er einen upload, ersetzte das alte...
> 
> wenn du eine Galerie hast, haste auch verweise auf die Bilder, die kannst du so auch rauslöschen.


Wir entfernen uns zwar vom Ausgangsthema, aber...

Wieso "Benutzerbilder", das hat der TS doch gar nicht gesagt, sondern allgemein Bilder, also noch allgemeiner Binärdaten, kann dein Beispiel nicht nachvollziehen.
Ist nicht grundsätzlich verkehrt diese Binärdaten in einer DB zu speichern, ein Dateisystem ist eben auch nur eine Datenbank, halt etwas primitiv 

Leichen bekommt man schnell: Datei hochgeladen, aber die "Transaktion" dann abgebrochen, bevor der  Eintrag mit dem Link in die DB geschrieben wurde -> Leiche
Was passiert wenn ein Backup eingespielt werden muss?
Dann muss man nicht nur die DB restoren, sondern auch den alten Zustand der Dateien im Dateisystem, mehr Aufwand, etc. pp.

Alles in allem ist es sauberer (eben was ich mit "proffessioneller" meinte), solche Daten in einer richtigen DB zu speichern, aber eben etwas aufwändiger am Anfang.


----------



## Tomate_Salat (13. Aug 2010)

maki hat gesagt.:


> Leichen bekommt man schnell: Datei hochgeladen, aber die "Transaktion" dann abgebrochen, bevor der  Eintrag mit dem Link in die DB geschrieben wurde -> Leiche



Meine größeren Webentwicklungen waren bisher immer auf php und dort wird das Bild erstmal temporär gespeichert(sofern ich das nicht behandle ists auch weg => keine leiche, wie das im Java-Bereich ausschaut, dazu komme ich in naher zukunft dann iwann noch^^).



> Was passiert wenn ein Backup eingespielt werden muss?
> Dann muss man nicht nur die DB restoren, sondern auch den alten Zustand der Dateien im Dateisystem, mehr Aufwand, etc. pp.



Naja, in dem Falle ist es sicherlich die komfortablere Variante, aber wer sagt den, dass zwingend auch die Bilder davor betroffen sein müssen? Wenn deine ganze Seite aufgrund ieinen Fehlers zerschossen wurde, was bringt dir da ein Backup von deiner DB wenn du die Seite nicht gesichert hast?


----------



## maki (13. Aug 2010)

> Naja, in dem Falle ist es sicherlich die komfortablere Variante, aber wer sagt den, dass zwingend auch die Bilder davor betroffen sein müssen? Wenn deine ganze Seite aufgrund ieinen Fehlers zerschossen wurde, was bringt dir da ein Backup von deiner DB wenn du die Seite nicht gesichert hast?


Die "Seite" ist in meinem Falle entweder eine WAR oder EAR die auf dem passenden Server läuft, also die App und die Laufzeitumgebung/Container.
Bilder/Binärdateien gehören zu den Daten.
Es reicht wenn die Daten (DB) zerschossen wurden, um ein Backup einspielen zu müssen


----------



## Tomate_Salat (13. Aug 2010)

*denkfehler* ok, ich bin noch viel zu tief in der php-Variante drinn :-/. Naja egal, meine Bedenken gelten eigentl. mehr der Performence. Bei kleineren Bildern mag das jz wahrscheinl. heutzutage nicht allzu sehr ins Gewicht fallen, aber bei größeren Bildern...wenn dazu noch viele Datenbankzugriffe statt finden


----------



## maki (13. Aug 2010)

Sehr richtig, große Dateien (Bilder, etc. pp.) stellen mal schnell ein Problem dar was zB. RAM/Heap betrifft, vor alllem vom ServletContainer zum EJB Container und dann nochmals in die DB, hab selber schon so und so gemacht, wollte aber nur nochmals darauf hinweisen bevor FArt es wieder machen muss


----------



## Tomate_Salat (13. Aug 2010)

maki hat gesagt.:


> bevor FArt es wieder machen muss



Sehr zuvorkommend von dir 

Also, damit das nicht komplet im OT endet, hier ne schöne kompromisslösung :toll:

Bild hochladen -> skalieren -> speichern.


----------



## hamid (13. Aug 2010)

nach soviel schreiben habe ich immernoch keine antwort auf meine 1.frage bekommen 

wie soll ich beim foto uploaden mit <input type="file"...arbeiten? wenn mein form kopf schon so aussieht 

<form:form .....also mit spring form tag arbeite.


darum gehts doch die ganze zeit !


----------



## maki (14. Aug 2010)

Du kannst mehr als eine Form pro HTML Seite haben, aber nciht schachteln, für Fileuploads macht das sogar Sinn.


----------

