35 Reaktionen zu “ExtBase File Upload”

Kommentare abonnieren (RSS) oder TrackBack URL

the $fileName var in the t3lib_div::getFileAbsFileName call has got to be wrong… isn’t that supposed to be _FILES[‚tx_example_article‘][’name‘] ?

Sy Moen am 18. November 2010 um 01:23

Well that actually depends on the form field naming within your view. In this case it was:

Hope this helps…

Nikolas Hagelstein am 18. November 2010 um 13:02

Damn code has been striped i add it to the article.

Nikolas Hagelstein am 18. November 2010 um 13:03

Right, thanks… and thanks for the article. Now maybe you will have an article on the new FLOW3 upload functionality? 😉

Sy Moen am 18. November 2010 um 20:40

Danke, der Tipp hat mir geholfen!

Übrigens, müsste es nicht t3lib_div::getFileAbsFileName(‚uploads/tx_example/‘));

statt t3lib_div::getFileAbsFileName(‚uploads/tx_example/‘ . $fileName));

heißen?

Viele Grüße,
Max.

Max am 24. November 2010 um 14:08

Absolut ich korrigier das mal.
Danke,
Nikolas

Nikolas Hagelstein am 24. November 2010 um 14:15

Hi Nikolas! Danke für den Artikel – ist der einzige seiner Art 😉

Bei mir will das jedoch nicht so richtig funktionieren…

Mein input sieht seltsamerweise so aus:

und ich schaff es nicht auf die Datei mittels $_FILES zuzugreifen.

Kannst du mir da weiterhelfen?

ToBe am 04. Juli 2011 um 18:17

also input-tag mit name=“tx_extkey_web_extkeyextkeymod1[newMagazine][file]“ 🙂

ToBe am 04. Juli 2011 um 18:19

bin grad selbst drauf gekommen…

$_FILES[‚tx_extkey_web_extkeyextkeymod1′][’name‘][’newMagazine‘][‚file‘]

sry für die Platzverschwendung 😉

ToBe am 04. Juli 2011 um 18:37

Great article. To see a service implementation, have a look at ext:fed and then open Classes/Service/File.php

Blessings,

tommy

Tommy Juhnke am 11. Oktober 2011 um 15:07

Vielen Dank, bei mir funktioniert das auch ganz gut. Bis auf eine Sache:

Wenn das ausgewählte File im Fluid-Uploadfeld (im Backend) zu groß ist, z.B. 100mb, dann bekomm ich einen Error dass die create-/updateAction nicht aufgerufen werden kann, weil das Domänenobjekt nicht vorhanden ist. Eine Filesize-Prüfung kann ich im Controller nicht einbauen, da gar keine Action aufgerufen wird.
Tritt das Verhalten bei euch auch auf? Weiß jemand eine Lösung?

mtv am 20. Oktober 2011 um 11:49

Wie sieht denn $_FILES dann aus?
Einfach mal var_dump($_FILES) ganz an den Anfang der Action schreiben und ggf. mal die komplette Action pasten (http://pastebin.com/ o.ä).

Nikolas Hagelstein am 20. Oktober 2011 um 12:13

Das Problem ist, dass die Action überhaupt nicht aufgerufen wird. Meine Domäne heißt ‚Manual‘ und die Fehlermeldung lautet:

An error occurred while trying to call Tx_xxx_Controller_ManualController->createAction(). Error: Required property ’newManual‘ does not exist.

Deswegen kann ich eben gar nichts in der Action prüfen. Die @dontvalidate Annotation ändert auch nichts an diesem Verhalten.
Funktioniert das denn bei dir problemlos mit so großen Files?

mtv am 20. Oktober 2011 um 12:19

Ok, das Problem liegt dann daran, das in dem Fall das Domain Object nicht mitgesendet wird. Annotiere das mal mit NULL|TX_whatever und setze in der Action “ function create(Tx_Whatever=NULL). Dann musst du allerdings eine manuelle überprüfung auf NULL machen.

Nikolas Hagelstein am 20. Oktober 2011 um 12:24

Ah super, das funktioniert. Damit kann ich dann theoretisch sagen, dass das File zu groß ist sobald das Domain Object === NULL ist.
Vielen Dank!!!

Das Verhalten tritt übrigens immer dann auf, wenn in PHP oder Typo3 die maxFileSize gesetzt ist und die Datei diesen Wert überschreitet.

mtv am 20. Oktober 2011 um 12:49

Gib mir mal nen Momment ich bau mal ein paar gangbare Variante für dieses Problem zusammen und update den Artikel dann. Danke fuer den hinweis übrigens. Bei mir selbst tritt das nicht auf, weil ich die filesize clientseitig mit som flash/js dings abfange.

Nikolas Hagelstein am 20. Oktober 2011 um 12:52

So ich hab den Artikel mal angepasst ich hoffen das hilft weiter.

Nikolas Hagelstein am 20. Oktober 2011 um 16:40

Danke für den Artikel. Da die FED Extension irgendwie nicht wirklich brauchbar ist, ist deine Beschreibung momentan die für mich einzig brauchbare Variante.

Ich würde allerdings die Dateigröße des Uploads im Object Validator prüfen und bei einer Größenüberschreitung einen entsprechenden PropertyError setzten.

So weiß der User auch warum die Datei nicht übertragen wurde

Alex am 10. November 2011 um 12:19

Mja, wenn das geht. Fraglich ob man in die Inhaltliche Validierung ueberhaupt kommt, wenn ander Parameter gar nicht Teil des Requests sind.

Nikolas Hagelstein am 10. November 2011 um 16:12

Habs gerade mal getestet. Der Objektvalidator wird immer angestoßen auch wenn benötigte Properties fehlen.
Man muss bei der Prüfung der Dateigröße aber halt dran denken den eigentlichen Upload Prozess weiterhin im Controller zu lassen.
Sobald der Teil komplett fertig ist poste ich gerne einen Auszug des Validators – wenn gewünscht.

Alex am 10. November 2011 um 18:35

hallo zusammen…
ich versuche gerade den fileupload zu sichern…
das problem ist, dass ich beim auslesen der dateiendung immer „string(0) ““ erhalte und damit natürlich nicht prüfen kann.
das hier sollte doch eigentlich funktionieren, oder?

$type = strtolower(strrchr($_FILES[‚tx_extensionname_pluginname‘][’name‘], ‚.‘));

kann mir irgendjemand nen hinweis oder tip geben?
tausend dank im voraus…
gruss…dominique

txomin am 19. Dezember 2011 um 17:02

check mal das $_FILES – Array … bei mir funktioniert es so:

$inputFileName = $_FILES[‚tx_‘ . strtolower($this->request->getControllerExtensionName()) . ‚_‘ . strtolower($this->request->getPluginName())][’name‘][$formName][‚logo‘];

ToBe am 19. Dezember 2011 um 18:25

hallo…
vielen dank erstmal, aber leider will es einfach nicht klappen.
vielleicht kannst du ja mal hier einen blick drauf werfen:
http://www.typo3forum.net/forum/extension-modifizieren-neu-erstellen/54359-extbase-file-upload.html

vielen dank schon mal im voraus

gruss…dominique

txomin am 21. Dezember 2011 um 16:26

mh schau mal genau: bei mir hab ich in eckigen Klammern stehen:

[’name‘][FORMULARNAME][FELDNAME]

bzw. dann:

[‚tmp_name‘][FORMULARNAME][FELDNAME]

mh ansonsten weis ich nur, dass es bei mir funktioniert 😉

Du solltest unbedingt mal das $_FILES-Array ausgeben lassen!

Grüße Tobi

ToBe am 21. Dezember 2011 um 16:40

hallo tobi…
habe das $_FILES-Array und meine createAction nochmal gepostet.
vielleicht könntest du noch ein letztes mal einen blick drauf werfen.

vielen dank
dominique

txomin am 22. Dezember 2011 um 16:38

Hallo Dominique!
das $_Files-Array und auch der Zugrif darauf ist, soweit ich das sehe, in Ordnung.
Ich würde dennoch so:
$_FILES[‚tx_‘ . strtolower($this->request->getControllerExtensionName()) . ‚_‘ . strtolower($this->request->getPluginName())][’name‘][$formName][‚image‘]
…darauf zugreifen. – Aber das evtl. für später.

Ich glaube, dass es an diesen Sachen liegt:
—–
$allowed = array_search($type, $allowedTypes);
—–
array_search liefert den key und nicht einen boolean. Du müsstest hier besser in_array() verwenden.

Hoffe das bringt dich weiter…

Grüße Tobi

ToBe am 23. Dezember 2011 um 08:48

hallo tobi.
hab’s grad nochmal mit deinen vorschlägen probiert und es funktioniert jetzt.
das skript hab ich wieder gepostet.
nochmal vielen, vielen dank, so kann ich doch noch mit einem guten gefühl in die „winterpause“ gehen.
guten rutsch und falls du weihnachten feierst, „frohe weihnachten“.
gruss, dominique

txomin am 23. Dezember 2011 um 17:37

Hallo Zusammen,

hat den keiner von Euch das Problem, das der Fileupload bei UPDATE-Action nicht funktioniert?
CREATE funktioniert, das Formular ist identisch mit Update.
Wenn ich die UPDATE-Action debugge, bekomme ich immer $_FILES = 0, sprich es wird kein File übergeben.
Es ist auch egal, ob ich einen Datensatz mit Bild oder ohne Bild update.
Jemand eine Lösung bzw. Ansatz warum das nicht funktioniert?
Viele Grüße
Mario

MBW am 16. April 2012 um 16:59

hallo mario…
meine create-action ist ja weiter oben verlinkt…
die update-action sieht schlicht und ergreifend so aus:

public function updateAction(Tx_Extensionname_Domain_Model_Object $object) {
$this->objectRepository->update($object);
$this->flashMessageContainer->add(‚Your object was updated.‘);
$this->redirect(‚list‘);
}

txomin am 16. April 2012 um 21:41

Hallo,
vielleicht hast Du mich falsch verstanden, wie eine Updateaction aussieht, weiß ich wohl 😉
Mir geht es darum, das ich im UPDATE-Action kein $_FILE bekomme, obwohl dasselbe Form benutzt wird wie beim NEW/CREATE

Beim UPDATE eines Datensatzes will ich unter Umständen a) ein Bild austauschen oder b) ein Bild hochladen.
Im Formular gibt es das , aber es wird kein File an den Server übergeben, trotz Auswahl.

Bei NEW/CREATE funktioniert es einwandfrei.

VG Mario

MBW am 17. April 2012 um 10:46

enctype=“multipart/form-data“ gesetzt?

Nikolas am 17. April 2012 um 11:07

Oh man, da sieht man vor lauter Extbase/Fluid nicht mehr den einfachste HTML-Fehler.
Daran lag es, der Extensionbuilder hat das beim New-Form eingetragen, aber nicht beim Edit-Form.
Danke!

VG Mario

MBW am 18. April 2012 um 17:09

Danke für das Tutorial!
Ich hätte allerdings noch eine Ergänzung: Da if ($_FILES[‚tx_example_article‘]) nicht überprüft, ob tatsächlich eine Datei hochgeladen wurde, wird -wenn keine Datei ausgewählt wird- trotzdem der Dateiname „_01“ gespeichert. Ich habe die Abfrage daher folgendermassen erweitert:
if ($_FILES[‚tx_example_article‘] && $_FILES[‚tx_example_article‘][’size‘][’newObject‘][‚image‘] != 0)

Raphael am 15. Juni 2012 um 10:15

Bei der suche nach dem passenden Code bin ich auch hier drüber gestolpert. Vielen Dank.

Hab dann aber noch was besseres gefunden, kann man sich ja bei Bedarf mal anschauen:
http://www.typo3forum.net/forum/extension-modifizieren-neu-erstellen/54359-extbase-file-upload.html#post_message_178605

Ist aber auch noch nicht perfekt, zum einen muss oben überprüft werden obs überhaupt was geschickt wird und weiter unten im Code wird anstatt der Variablen ‚tx_extensionname_pluginname‘ statisch verwendet.

Sebastian Müller am 26. Juli 2012 um 14:20
Trackbacks & Pingbacks

[…] hab schonmal hier: https://typo3blogger.de/extbase-file-upload/ etwas zu dazu […]

Kategorien

Archiv