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