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
rutschm...@agentur-volumen.de

Danziger Straße 3, 88250 Weingarten, Deutschland
www.agentur-volumen.de
USt.-Id.Nr.: DE281344599
_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

Reply via email to