2010-11-20 28 views
3

J'ai des problèmes avec Drupal 7 et le téléchargement de fichiers.Comment télécharger un fichier dans Drupal 7 avec des formulaires?

Mon code qui ne fonctionne pas:

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).'-'); 

} 

Donc chemin créé, mais fichier ne retourne uploads et file_save_upload FAUX. J'ai aussi essayé array() et true comme $ validators sans effet.

Toute aide grandement appréciée. Merci.

+0

Comment obtenir le nom de fichier dynamiquement? – Hitesh

+0

Le nom de fichier est complètement inutile dans ce code. Laissez-le complètement. Ne définissez pas la variable $ filename et ne l'ajoutez pas à $ filepath. – Magmatic

+0

L'utilisation d'un tableau vide de validateurs de fichiers, tel que array ('file_validate_extensions' => array()), n'est pas sûre et ne devrait pas être utilisée. Utilisez NULL à la place, pour prendre la valeur par défaut, ou faites une vraie liste vous-même. Voir la note sur https://api.drupal.org/api/drupal/includes!file.inc/function/file_save_upload/7 – Magmatic

Répondre

4

Doh. $ destination ne doit pas contenir de nom de fichier, juste un chemin.

+0

Pour ceux d'entre vous qui se demandent où $ destination est, c'est le troisième argument de file_save_upload. Cette ligne devrait ressembler à ceci: $ file = file_save_upload ('podcast', array ('file_validate_extensions' => array()), $ filepath); Ou de préférence, comme ceci: $ file = file_save_upload ('podcast', null, $ filepath); C'est beaucoup plus sûr. Cela ne permet pas de télécharger des fichiers PHP, ce qui représenterait un énorme risque de sécurité. Voir https://api.drupal.org/api/drupal/includes!file.inc/function/file_save_upload/7 – Magmatic