[TYPO3-german] Fluid/Extbase: Wie kann ein Benutzer ein Bild hochladen?

Robert Schneider r.schneider at artworx.at
Fri Jul 20 14:48:29 CEST 2012


Am 20.07.2012 12:44, schrieb Jost Baron:
> Hi Robert,
>
> die temporäre Datei wird natürlich gelöscht, wenn der TYPO3-Request
> abgearbeitet ist, du findest also hinterher manuell nichts mehr im
> xampp/tmp-Verzeichnis.

Das war wohl das Problem. Bin da noch nicht so sicher unterwegs mit PHP 
und schon gar nicht mit Extensions, noch mit Typo3. Habe eine Menge 
Unwissen angehäuft.

Das war jetzt aber eine PHP-Sache, oder? Dateien werden von PHP, oder 
vielleicht etwa vom Apache wieder gelöscht? Typo3 ist es nicht, glaube ich.

Wie auch immer...

> f:debug in Fluid funktioniert z.B. mit {variable -> f:debug()}, wobei du
> deinem View natürlich die Variable "variable" irgendwann zugewiesen
> haben muss.
>
> Hast du vielleicht am Ende deiner updateAction ein redirect eingebaut?
> Dann ist jegliche Variablenzuweisung an den view hinterher natürlich weg
> (es wird ja ein ganz neuer Request gestartet). Du könntest das redirect
> aber auskommentieren und ein neues Template für die Update-Action
> anlegen, das nur debug-Zwecken dient.

Habe ein forward drinne, ja, wobei sich die Situation nicht ändert, wenn 
ich es rausnehme und stattdessen ein Template hinzufüge. Aber der Wert 
einer Variablen konnte ich mit {variable} schon ganz normal ausgeben. 
Nur in f:debug irgendwie nicht. Keine Ahnung woran das nun wieder liegt 
(es nervt schon... immer Unklarheiten und kaum eine gescheite 
Informationsquelle im Netz - naja, zum Glück gibt's das Forum, in dem 
einen nette Menschen weiterhelfen :-) .

Nun habe ich auch noch moveUpload von dir probiert. Zwei Probleme/Fehler:

1) Es sollte wohl heißen:
t3lib_div::upload_copy_move($path . DIRECTORY_SEPARATOR . $name, $fileName);

2)Der Aufruf von t3lib_Utility_Path::getRelativePath(PATH_site, 
$fileName) macht unter Windows Probleme, weil intern mit 
DIRECTORY_SEPARATOR gearbeitet wird, die anderen Pfade aber immer '/' 
enthalten. Aber das scheint auch nicht das ganze Problem zu sein, denn 
ein Ersetzen von '\' durch '/' im $fileName hilft auch nicht. 
'C:/xampp/htdocs/psa-web/' als sourcePath und 
'C:/xampp/htdocs/psa-web/uploads/tx_psa/php5216.tmp' als targetPath 
führen zu NULL.

Aber immerhin wird schon einmal die Datei ordnungsgemäß abgelegt. Das 
ist mal das Wichtigste.




> Am 7/20/2012 12:03 PM, schrieb Robert Schneider:
>> Hi Jost,
>>
>> das mit dem property-Attribut hilft schon etwas weiter. Das mit debug im
>> Fluid klappt bei mir überhaupt nicht (übrigens T3-Version 4.7.1), da
>> kann ich nicht einmal einen String ausgeben lassen.
>>
>> Was ein Problem in der Debug-Ausgabe mit t3lib_utility_Debug::debug ist,
>> habe ich nun herausgefunden: Scheinbar wird die ganze Ausgabe gleich
>> ganz unterbunden, wenn Sonderzeichen vorkommen. Denn, wenn ich einen
>> String mit urlencode umwandle, dann geht's. So bin ich nun darauf
>> gekommen, dass mir
>>
>> t3lib_utility_Debug::debug(">>>" .
>> urlencode($_FILES['tx_psa_user_psapsadatamanager']['tmp_name']['userFileUploadForm']['filename']));
>>
>>
>>
>> diese Ausgabe liefert: 'C%3A%5Cxampp%5Ctmp%5Cphp14FF.tmp'.
>> Übersetzt heißt das: 'C:\xampp\tmp\php14FF.tmp'.
>>
>> Blöd, dass da debug so komisch funktioniert. Warum wandelt es nicht
>> selbst in darstellbare Zeichen um?
>>
>> Naja, und
>>
>> t3lib_utility_Debug::debug(urlencode($_FILES['tx_psa_user_psapsadatamanager']['error']['userFileUploadForm']['filename']));
>>
>>
>>
>> liefert mir 0. Also kein Fehler. Und eine Dateigröße ist auch vorhanden
>> (12 Bytes).
>>
>> Da bin ich ja jetzt schon mal einen Schritt weiter. Nur: Die Datei ist
>> leider nicht da.
>>
>> Habe mir die php.ini angeschaut. file_uploads ist auf 'On' gesetzt. Das
>> sollte also nicht das Problem sein. Mache das übrigens alles lokal. Ich
>> glaube, das Problem hat aber jetzt nichts mehr mit Typo3 zu tun.
>>
>> Muss noch schauen.
>>
>> Danke dir nochmal soweit, Jost. Das hat mir schon geholfen. Und das mit
>> dem weiteren Prozedere ist wahrscheinlich auch hilfreich. Aber dazu
>> komme ich erst noch.
>>
>> Gruß und schönes WE.
>> Robert
>>
>>
>>
>>
>> Am 20.07.2012 09:55, schrieb Jost Baron:
>>> -----BEGIN PGP SIGNED MESSAGE-----
>>> Hash: SHA1
>>>
>>> Hi Robert,
>>>
>>> Hast du mal probiert, das Array
>>> $_FILE['tx_psa_user_psapsadatamanager'] nach dem Upload an Fluid zu
>>> übergeben und mit f:debug auszugeben? Da kriegt man eine ziemlich gute
>>> Debug-Ausgabe, vielleicht findest du dort den Grund.
>>>
>>> Un ein Schuss ins Blaue: Was passiert, wenn du im Fluid-Template statt
>>> name="filename" den Wert property="filename" setzt? Dann müssten die
>>> Daten über
>>>
>>> $_FILES['tx_psa_user_psapsadatamanager']['name']['userFileUploadForm']['filename']
>>>
>>>
>>>
>>> erreichbar sein.
>>>
>>> Gruß Jost
>>>
>>> On 07/19/2012 03:59 PM, Robert Schneider wrote:
>>>> Ich hoffe, mir kann nochmal wer helfen.
>>>>
>>>> Mein Fluid-Template sieht so aus:
>>>>
>>>> <f:form action="update" enctype="multipart/form-data"
>>>> name="userFileUploadForm" method="post"> <f:form.upload
>>>> name="filename"/> <f:form.submit value="Start"/> </f:form>
>>>>
>>>>
>>>> Und in der Action greife ich nun zum Debuggen mal so darauf zu:
>>>>
>>>> t3lib_utility_Debug::debug(
>>>> $_FILES['tx_psa_user_psapsadatamanager']['name']['filename']);
>>>>
>>>> Da sehe ich immerhin schon, dass der richtige Dateiname vorhanden
>>>> ist. Auch die Größe der Datei kann ich mir ausgeben lassen.
>>>> tmp_name macht aber Probleme:
>>>>
>>>>
>>>> t3lib_utility_Debug::debug(
>>>> $_FILES['tx_psa_user_psapsadatamanager']['tmp_name']['filename']);
>>>>
>>>> lässt nicht einmal die Debugausgabe erscheinen. Wenn ich
>>>>
>>>> t3lib_utility_Debug::debug(
>>>> array_keys($_FILES['tx_psa_user_psapsadatamanager']['tmp_name']));
>>>>
>>>> mache, dann wird mir zwar der key 'filename:' angezeigt, aber
>>>> irgendwie ist da nichts drin - NULL ist es aber auch nicht. print_r
>>>> auf $_FILES['tx_psa_user_psapsadatamanager']['tmp_name'] erzeugt
>>>> auch keine Debug-Ausgabe.
>>>>
>>>> Was ist da los, was mache ich falsch?
>>>>
>>>>
>>>> Am 19.07.2012 11:58, schrieb Robert Schneider:
>>>>> Dank dir, Jost.
>>>>>
>>>>> Das mit dem Dateiverschieben, wird man wohl auch brauchen.
>>>>> Derzeit stecke ich aber schon am Controller und im Fluid fest.
>>>>> Wie muss das denn genau ausschauen? Braucht man da das
>>>>> object-Attribut im form-Element? Falls ja, muss ich das mit
>>>>> $this->view->assign mit etwas befüllen?
>>>>>
>>>>>> Den Namen der Datei im temporären Verzeichnis findest du in
>>>>>> der
>>>>> Variablen
>>>>>> $_FILES['tx_extkey_pluginkey']['tmp_name'][...]['datei'],
>>>>>
>>>>> Meinst du mit'datei' den Namen, den ich in Fluid auch angebe?
>>>>> Kann es dann eigentlich Probleme geben, wenn das zwei Benutzer
>>>>> ungefähr gleichzeitig machen (was in meinem Fall nicht der Fall
>>>>> sein wird)?
>>>>>
>>>>> Gruß, Robert
>>>>>
>>>>>
>>>>> Am 19.07.2012 10:36, schrieb Jost Baron:
>>>> Hi Robert,
>>>>
>>>> an der Stelle ist es - meines Wissens nach - zuende mit der Magie
>>>> von extbase und fluid. Die Datei landet im temporären Verzeichnis,
>>>> und muss dann manuell von dort in das Upload-Verzeichnis kopiert
>>>> werden.
>>>>
>>>> Den Namen der Datei im temporären Verzeichnis findest du in der
>>>> Variablen
>>>> $_FILES['tx_extkey_pluginkey']['tmp_name'][...]['datei'],
>>>>
>>>> den Namen der hochgeladenen Datei in
>>>> $_FILES['tx_extkey_pluginkey']['name'][...]['datei']
>>>>
>>>> [...] steht dabei für den Pfad zu der property, die dem
>>>> Upload-Feld gegeben wurde. Wenn das Uploadfeld also z.B. Namen
>>>> tx_extkey[foo][bar][datei] hat, ist der Dateiname in
>>>>
>>>> $_FILES['tx_extkey_pluginkey']['tmp_name']['foo']['bar']['datei']
>>>>
>>>> drin. Mit den beiden Informationen kannst du dann die Datei dahin
>>>> verschieben wo du Lust hast, einen Service zu diesem Zweck (sicher
>>>> optimierbar) findest du hier:
>>>>
>>>> http://pastebin.com/kCRxj7du
>>>>
>>>>
>>>> Eventuell gibt es sowas aber auch schon in der
>>>> community-Extension, vielleicht lohnt sich auch ein Blick dort
>>>> hinein.
>>>>
>>>> Gruß Jost
>>>>
>>>> On 07/19/2012 10:17 AM, Robert Schneider wrote:
>>>>>>>> Hi! Dies ist mein erstes Posting in der Newsgroup. Bin
>>>>>>>> gespannt, wie das hier mit der Hilfe klappt. Darauf bin ich
>>>>>>>> noch sehr angewiesen.
>>>>>>>>
>>>>>>>> Also, mein Problem: Ich würde gerne einen Benutzer im
>>>>>>>> Backend eine CSV-Datei hochladen lassen, die dann
>>>>>>>> weiterverarbeitet werden soll. Aber wie schaffe ich das?
>>>>>>>> Hat vielleicht wer ein einfaches aber vollständiges
>>>>>>>> Beispiel dazu? Es zermürbt mich schon sehr, dass ich das
>>>>>>>> nicht selbst herauffinden kann. Was ich unter
>>>>>>>> http://typo3blogger.de/extbase-file-upload/ gefunden habe,
>>>>>>>> hilft mir auch nicht so richtig weiter. Wo würden
>>>>>>>> hochgeladene Dateien eigentlich landen - im
>>>>>>>> uploads-Ordner?
>>>>>>>>
>>>>>>>> Kann mir wer helfen?
>>>>>>>>
>>>>>>>> Danke und Gruß, Robert
>>>>>>>> _______________________________________________
>>>>>>>> TYPO3-german mailing list TYPO3-german at lists.typo3.org
>>>>>>>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
>>>>>>
>>>>>
>>>>>
>>>>
>>>>>>>>
>>>>
>>>> _______________________________________________ TYPO3-german
>>>> mailing list TYPO3-german at lists.typo3.org
>>>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
>>> -----BEGIN PGP SIGNATURE-----
>>> Version: GnuPG v1.4.11 (GNU/Linux)
>>> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
>>>
>>> iQIcBAEBAgAGBQJQCQ8GAAoJEG6HPMAgWtVzaR4P+wV6oMmjdrL0Xb2ZbRxPArmx
>>> pHsF1/2Lo8OppgXLWLy8LmCx5mxnr27uWcs4Z1lBlCJfhi4q7jk8hVOumxFTYBAd
>>> HNkNw9pO8GE872jLQT3JSdP+9sUfhciPzBUGA+CzXGLVSNwJDoeNxHAUUMln4tMB
>>> RTeWGo/+6z1284mtxeyYCtTAP6DzGoEPFQW92RdHAzIeJM7SZWzW4ZPdINDOqA4q
>>> kec4zv6qHZb7WdPnyMRLdIMQmAiYFG7ui9liHV5+Yo31LRdrQTwhtqP6IKrlEb5M
>>> zfcaO5xDegaFZPlRbaU9oMgiNPlrjg77EhEGZB95BBxrfMKyLkQiLqFO6T/TYENp
>>> DoPN6+JxkOn9BqPWeFl59ksNPANYQbXzF3+3rZGsduRJr3qmza0gelmJGl4u9Us6
>>> T48/A4XokOSjciDP6cBBnee2lC2eUy2mQ0m3bKA7jXsdITTuqQh2KaSRd9WFxWSv
>>> ymbBLdn4QjFOYTF68kJFEj/+3oTVuo035UyvVM6bWultJQdq9fUM6E83varGq24B
>>> c3PCUKsSxu8i8Xbl3nk3lM5JM1axfxBQcmxaK/slMTPHS0RIzjAwET6EnITgMAT6
>>> 4LxzipYXcFnNWysb+mk4NPhJ+6k1UmVeu0tbg0EuUfFEqQlUFfGQU7JFjw2m+qCj
>>> STtYogkt4pexC7oVu0Eh
>>> =WpNZ
>>> -----END PGP SIGNATURE-----
>>>
>>
>>
>> _______________________________________________
>> TYPO3-german mailing list
>> TYPO3-german at lists.typo3.org
>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
>
>




More information about the TYPO3-german mailing list