Datei Upload: Extensions
am 22.05.2009 - 13:29 Uhr in
Tach,
Ich arbeite grade an einem Modul um eine datei hochzuladen.
Kurze Beschreibung:
Das Modul erstellt eine Seite mit einem Textfeld mit "durchsuchen"-Button und einem Submit-Button. Der Benutzer kann also eine Datei von seiner Festplatte aussuchen und diese dann hochladen. Soweit sogut, funktioniert alles.
Mein Problem ist jetzt folgendes. Ich möchte nicht, dass der Nutzer Dateien jeder Art hochladen darf. Ich möchte es auf .txt und .doc Dateien beschränken, aber irgendwie klappt es nicht. Hier mal der Code:
<?php
/*
********************************************************************************
* Form-Elemente
********************************************************************************
*/
function dataUpload_form()
{
$form['#attributes'] = array('enctype' => "multipart/form-data");
$form['file_upload'] = array(
'#type' => 'file',
'#title' => 'Datei-Pfad',
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Datei hochladen'
);
return $form;
}
/*
********************************************************************************
* Datei hochladen
********************************************************************************
*/
function dataUpload_form_submit($form, &$form_state)
{
$limits = array('extensions' => 'txt');
//Zulässige Dateiendungen
$validators = array(
'file_validate_extensions' => array($limits['extensions'])
);
//Pfad des Ordners, wo die Uploads gespeichert werden
$upload_path = drupal_get_path('module', 'dataUpload') . '/Uploads';
if ($file = file_save_upload('file_upload', $validators, file_directory_path()))
{
drupal_set_message("Die datei $file->filename wurde erfolgreich hochgeladen.");
if(file_check_directory($dir)) //kann in das Verzeichnis geschrieben werden?
{
file_move($file, $upload_path, $replace = FILE_EXISTS_RENAME);
} else
{
drupal_set_message(("Datei konnte nicht verschoben werden!"), 'error');
}
} else
{
drupal_set_message(("Fehler beim Hochladen"), 'error');
}
}
?>Mit file_validate_extensions möchte ich also den Upload nur erlauben, wenn es sich um eine txt-Datei handelt, aber es ist immernoch möglich Dateien anderen Typs hochzuladen. Habs auch schon mit file_validate_extensions($file, 'txt') versucht, aber der Array, der zurückgegeben wird ist jedes mal leer, egal welchen datei-Typ ich hochlade. Ich hoffe jemand sieht den Fehler bzw kann mir ne andere Möglichkeit zeigen.
- Anmelden oder Registrieren um Kommentare zu schreiben

hook_validate
am 04.06.2009 - 07:42 Uhr
Moin.
Die Überprüfung sollte in
hook_validate()erfolgen, nicht in der submit-Funktion. Siehe dazu auch den Workflow eines Formulars.hth,
Stefan
--
sei nett zu Deinem Themer
Geht bei mir auch nicht
am 03.12.2009 - 18:30 Uhr
Hi,
ich habe das selbe Problem. Der Dateiupload funktioniert über einen ahah-callback und die entsprechende Funktion sieht folgendermaßen aus:
<?php
function mymodule_font_install_js() {
$validators = array(
'file_validate_extensions' => array('ttf otf'),
);
if ($file = file_save_upload('font_upload', $validators)) {
$destination = file_directory_path().'/fonts/';
file_copy($file, $destination, FILE_EXISTS_REPLACE);
}
$output = '<div class="status">'. t('Font installed successfully.') .'</div>';
if ($file == 0) {
$output = '<div class="error"><ul style="margin: 0.1em">';
foreach(form_get_errors() as $field => $msg) {
$output .= '<li>'. $msg .'</li>';
}
$output .= '</ul></div>';
}
print drupal_to_js(array('status' => TRUE, 'data' => $output));
exit;
}
?>
Es ist dennoch möglich jeden beliebigen Dateitypen hochzuladen. Ob es in hook_validate() ist oder nicht, dürfte file_validate_extensions() dabei doch ziemlich egal sein, oder nicht?
Problem solved!
am 20.01.2011 - 02:19 Uhr
hallo! ist jetzt vielleicht ein wenig spät diese Antwort (bald zwei Jahre..). Vielleicht habt ihr ja in der Zwischenzeit die Lösung des Problems gefunden. Für alle anderen:
in der entsprechenden funktion file_validate_extensions() kommt eine if-Abfrage vor der File-Extension Prüfung, die so aussieht ->
if ($user->uid != 1)
AHA! Wenn ihr also als admin angemeldet seit, dann dürft ihr so alles uploaden, was euch beliebt. Bei allen anderen Usern oder nicht angemeldeten Gästen funktioniert die Funktion schon. Noch Fragen?
Wozu ein Modul schreiben was
am 20.01.2011 - 09:01 Uhr
Wozu ein Modul schreiben was es schon gibt. Upload. Da kann man Dateiendungen angeben oder CCK Filefield. Auch da kann man Dateiendungen angeben
...
am 20.01.2011 - 14:16 Uhr
Wozu irgendwelche Fragen stellen, wenn diese doch überflüssig sind? Vielleicht kann man nicht alles mit CCK einstellen was man für sein Module braucht..
zumal man ja auch nicht
am 14.02.2011 - 12:33 Uhr
zumal man ja auch nicht unbedingt immer gleich eine Node erstellen möchte, nur um etwas hochzuladen