2010-11-20 8 views
3

Ich habe Probleme mit Drupal 7 und dem Hochladen von Dateien.Wie man Datei in Drupal 7 mit Formularen hochlädt?

Mein Code, das nicht funktioniert:

function test_form($form, &$form_state){ 

$form['#attributes'] = array('enctype' => "multipart/form-data"); 
$form['podcast'] = array(
    '#title' => 'Audio file', 
    '#type' => 'file', 
); 
$form['submit'] = array(
    '#type' => 'submit', 
    '#value' => t('Save'), 
); 
return $form; 

} 

function test_form_submit($form, &$form_state){ 

$vals = $form_state['values']; 
$filepath = 'public://test/'; 
//$filepath = 'temporary://test/'; 
$filename = 'rcc_date.mp3'; 

file_prepare_directory($filepath, FILE_CREATE_DIRECTORY); 
$file = file_save_upload('podcast', array('file_validate_extensions' => array()), $filepath.$filename); 
//got FALSE here. Why? 
die(print_r($file===FALSE).'-'); 

} 

So erstellt Pfad aber Datei nicht Up- und file_save_upload FALSCH. Ich habe auch array() und true als $ validators ohne Wirkung versucht.

Jede Hilfe sehr geschätzt. Vielen Dank.

+0

Wie wird der Dateiname dynamisch abgerufen? – Hitesh

+0

Der Dateiname ist in diesem Code völlig unnötig. Lass es komplett aus. Setzen Sie die Variable $ filename nicht und hängen Sie sie nicht an $ filepath an. – Magmatic

+0

Um ein leeres Array von Dateiprüfern zu verwenden, wie array ('file_validate_extensions' => array()), ist es unsicher und sollte nicht verwendet werden. Verwenden Sie stattdessen NULL, um den Standardwert zu übernehmen, oder erstellen Sie selbst eine echte Liste. Siehe den Hinweis in https://api.drupal.org/api/drupal/includes!file.inc/function/file_save_upload/7 – Magmatic

Antwort

4

Doh. $ destination darf keinen Dateinamen enthalten, nur path.

+0

Für diejenigen, die sich fragen, wo $ Ziel ist, ist es das dritte Argument für file_save_upload. Diese Zeile sollte so aussehen: $ file = file_save_upload ('podcast', array ('file_validate_extensions' => array()), $ filepath); Oder vorzugsweise, wie folgt: $ file = file_save_upload ('podcast', null, $ filepath); Das ist viel sicherer. So können beispielsweise keine PHP-Dateien hochgeladen werden, was ein großes Sicherheitsrisiko darstellt. Siehe https://api.drupal.org/api/drupal/includes!file.inc/function/file_save_upload/7 – Magmatic