File Upload - Datei-Namen überprüfen
am 12.01.2010 - 12:06 Uhr in
Hallo,
Ich hab vor einer Weile ein Modul geschrieben, mit dem man Dateien hochladen kann. Diese Dateien werden dann den Usern in einem Block angezeigt, sodass sie heruntergeladen werden können.
Nun bin ich dabei diese Modul zu erweitern/verbessern. Zum Beispiel dürfen nun nurnoch PDF-Dateien hochgeladen werden. Nun möcht ich noch den Datei-Namen überprüfen, bevor die Datei hochgeladen wird. Da die Datei-Namen ja in einem relativ schmalen Block angezeigt werden, sollen die Datei-Namen nicht länger als 20 Zeichen sein bzw nach spätestens 19 Zeichen einen Bindestrich haben. Zudem sollen auch keine Leerzeichen im Namen enthalten sein usw.
Die Umsetzung dieser Kriterien ist ansich kein Problem, nur komme ich nicht an den Datei-Namen ran bevor diese hochgeladen wurde, weder in der Validierungsfunktion noch in der Submit-Funktion.
Vielleicht mach ich ja was falsch oder ich hab den richtigen Ansatz noch nicht gefunden. Hier mal der Code:
<?php
function my_download_new_file_forms()
{
$form['#attributes'] = array('enctype' => "multipart/form-data");
$form['my_download_upload'] = array(
'#type' => 'file',
'#title' => 'Datei Hochladen',
'#description' => utf8_encode('To-Do'),
);
$form['my_download_upload_submit'] = array(
'#title' => utf8_encode('Hochladen'),
'#value' => utf8_encode('Hochladen'),
'#type' => 'submit',
);
return $form;
}
/**
* Submit-Fkt zum Hochladen einer neuen PDF-Datei
*/
function my_download_new_file_forms_submit($form, &$form_state)
{
//Zulässige Dateiendungen
$validators = array( 'file_validate_extensions' => array('pdf PDF'));
//Pfad des Ordners, wo die Uploads gespeichert werden
$upload_path = 'sites/default/files/downloads/';
if($file = file_save_upload('my_download_upload', $validators,
$upload_path, $replace = FILE_EXISTS_RENAME))
{
file_set_status($file, FILE_STATUS_PERMANENT);
drupal_set_message("Upload erfolgreich");
} else
{
drupal_set_message("Fehler beim Upload", 'error');
}
}
?>Ich vermute, dass man den Namen mit Hilfe des $validators - Array überprüfen kann, nur hab ich trotz längerer Suche noch keine Antwort gefunden.
- Anmelden oder Registrieren um Kommentare zu schreiben

Hi, schau dir mal das Modul
am 13.01.2010 - 09:50 Uhr
Hi,
schau dir mal das Modul an:
http://drupal.org/project/transliteration
<?php'#title' => utf8_encode('Hochladen'),
?>
Das utf8_encode ist sinnlos. Deine PHP Datei sollte so oder so utf-8 sein. Wenn schon eine Funktion, dann benutz t(). In die darf aber nur englischer Text rein, da aus den Scripten Englisch erwartete wird, als Standard.
<?php$replace = FILE_EXISTS_RENAME
?>
Die Konstante allein tut es auch.
<?phpdrupal_set_message("Fehler beim Upload", 'error');
?>
Benutze am besten nur 'text' und nicht "text" und schon gar nicht mischen.
Und schau nochmal hier rein:
http://drupal.org/coding-standards
---
Viele Grüße,
Kars-T
| comm-press
Zitat: Das utf8_encode ist
am 13.01.2010 - 12:02 Uhr
Das utf8_encode ist sinnlos. Deine PHP Datei sollte so oder so utf-8 sein.
Da ist wohl jemand von der Sollte-Seuche befallen :-)
An dieser Stelle mag das vielleicht sinnlos sein, aber bei Submit-Button, deren Titel ein oder mehrere Umlaute enthält, sah das bis jetzt immer anders aus. In dem Modul, von dem ich im Eröffnungspost einen Teil gepostet hab, befindet sich auch noch eine Funktion zum Löschen der hochgeladenen Dateien. Der Submit-Button heißt dementsprechend "Löschen". Wenn ich den Titel des Button nicht vorher utf8-codiere, dann wird mir garkein Titel angezeigt. Dass der Titel des Hochladen-Buttons auch utf8-codiert ist, ist auf Copy-Paste + meine Faulheit zurückzuführen :-)
Benutze am besten nur 'text' und nicht "text" und schon gar nicht mischen.
Das Rumgemische war keinesfalls beabsichtigt, sondern eher ein Flüchtigkeitsfehler.
Nun aber zurück zum eigentlichen Thema
schau dir mal das Modul an:
http://drupal.org/project/transliteration
Ich werd mir das Modul mal genauer anschaun. Es scheint ja laut Beschreibung genau das zu machen, wonach ich suche.
Sollte
am 13.01.2010 - 12:45 Uhr
Also das "sollte" war eigentlich nur als nettes "tu es nicht!" gedacht ;)
Wenn du so ein beschriebenes Problem hast, dann klingt das stark danach, das deine Dateien nicht utf-8 kodiert sind. Und das musst du ändern. Du wirst kein Modul finden, das das so macht und es ist einfach nicht nötig. Das ist ein Folge-Fehler, den du an der Wurzel packen "solltest" :D
---
Viele Grüße,
Kars-T
| comm-press
Die Frage ist jetzt nur: Wo
am 13.01.2010 - 13:12 Uhr
Die Frage ist jetzt nur: Wo befindet sich die Wurfel?
Firebug zeigt mit beim Untersuchen der Seite im Head folgendes an:
<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>Das wiederum lässt mich glauben das meine Seite UTF8-codiert ist. Meine Datenbank ist zudem auch UTF8-codiert. Ich hab also keine Ahnung wo die von dir erwähnte Wurzel zu suchen ist.
Du musst dir die
am 13.01.2010 - 13:25 Uhr
Du musst dir die Dateien-Kodierung in deinem Editor anschauen.
Was benutzt du denn?
Ist das vielleicht auf windows-1252 oder iso-8859-1?
---
Viele Grüße,
Kars-T
| comm-press
Ach guck einer an, wer
am 13.01.2010 - 13:52 Uhr
Ach guck einer an, wer hätte gedacht, dass es am Editor liegt :-)
Vielen dank für den Hinweis.