[TYPO3-german] extbase $_FILES werte

Manfred Rutschmann - VOLUMEN Werbe-/Internetagentur rutschmann at agentur-volumen.de
Mon Feb 24 18:37:07 CET 2014


arianesardinas schrieb:
> Hallo Leute,
> 
> ich habe eine Dateiupload in einer extbase extension programmiert. Es 
> funktioniert auch ok.
> Mein Problem ist bei der Validation des Formulars, wenn nicht alles 
> Pflichtfelder des Formulares gefüllt werden, gehen die bereits 
> hochgeladene Files verloren.
> also die $_FILES Werte gehen verloren aber nicht die restliche $_POST 
> Werte.
> 
> Zum Beispiel:
> 
> <input type="text" value="der Wert den man gerade eingetragen hat" 
> name="tx_jobsdfu_pi1[newBewerbung][aktulleposition]">
> Nach Validation der Form gehen die Werte nicht verloren, wenn man das 
> formularfeld ausgefüllt hat.
> 
> <f:form.upload property="lebenslauf" />
> Nach Validation der Form ist  die file lebenslauf value leer oder nicht da.
> 
> Hat jemand eine Idee, wie man die  bereits hochgeladene Files nicht 
> verloren gehen?
> 
> Besteht die Möglichkeit auch bei der <f:form.upload das die Value auch 
> da erscheinen?
> oder sehe ich das komplett falsch?
> danke in voraus!

Hallo Ariane,

das siehst Du schon richtig. Das Problem ist dass du in das Feld keinen 
Wert bekommen kannst da es lediglich ein Upload Formular Element ist 
dass sich nicht vorausfüllen lässt. Du könntest natürlich in einer 
initializeCreateAction oder wie auch immer das File abfangen und als in 
ein input schreiben, hast aber dann das Problem, dass je nach 
Validierung eben der Stream jedesmal von vorne abgesendet wird. Hast Du 
also eine Datei mit 3 MB und die validierung schlägt 3 mal fehl, muss 
bei jedem absdenden die 3 MB verschickt werden. Das ist krampf.

Ich mache das in der Regel so dass ich alles über Drag&Drop oder AJAX 
Uploads mache. Dabei wird das File beim Droppen an den Server geschickt 
und verarbeitet. Als Rückgabewert könnte dann der Dateiname kommen. Das 
ganze kannst Du aber auch in der Session abspeichern, dann lässt sich 
das nicht manipulieren. Du brauchst dann lediglich einen Scheduler der 
die Datein im Uploadverzeichnis gegen die Datenbank prüft und verweiste 
Files rauslöscht.

Hier ein beispiel aus einem Extbase Backend-Modul, da brauchts keine 
Session für:

     /**
      * @param Product $product
      * @return string
      */
     public function imageuploadAction(Product $product){
         /** @var array $arguments */
         $arguments = $this->request->getArguments();

         if($arguments['base64']==1){
             /** @var string $file */
             $file = base64_decode(file_get_contents('php://input'));
         } else {
             /** @var string $file */
             $file = file_get_contents('php://input');
         }

         /** @var \TYPO3\CMS\Core\Utility\File\BasicFileUtility 
$basicFileFunctions */
         $basicFileFunctions = 
$this->objectManager->get('TYPO3\\CMS\\Core\\Utility\\File\\BasicFileUtility');
         /** @var string $fileName */
         $fileName = $basicFileFunctions->getUniqueName(
             $arguments['filename'],
             GeneralUtility::getFileAbsFileName('uploads/tx_products/')
         );

         file_put_contents($fileName, $file);

         $return = array('filename' => basename($fileName), 'product' => 
$product->getUid());
         $this->response->setHeader('Content-Type', 'application/json', 
TRUE);
         $this->response->sendHeaders();
         return json_encode($return);
     }

So kannst Du ganz easy Single oder Multiple Uploads machen ohne die Form 
  in verbindung mit dem Upload validieren zu müssen.

Alternativ würde ich Dir aber bei einer FE Anwendung noch dazu raten 
einen JS Validator mit einzubauen. Dann gehst Du dem problem in der 
Regel um 99% aus dem Weg.

Es führen viele Wege zum Ziel.... ;-)

-- 
================================================

Manfred Rutschmann

Telefon: +49 (0)751 - 561110-45
Mobil: +49 (0)163 - 1721748
rutschmann at agentur-volumen.de

Danziger Straße 3, 88250 Weingarten, Deutschland
www.agentur-volumen.de
USt.-Id.Nr.: DE281344599


More information about the TYPO3-german mailing list