Допустимые расширения для поля загрузки в Drupal 7

#drupal #drupal-7

#drupal #drupal-7

Вопрос:

Мне нужно создать форму для загрузки файла CSV. При попытке использовать элемент формы ниже я получаю следующую ошибку:

Разрешены только файлы со следующими расширениями: jpg jpeg gif png txt doc xls pdf ppt pps odt ods odp.

   $form['data_file'] = array(
    '#type' => 'file',
    '#title' => t('Data File'),
    '#description' => t('CSV file to upload.'),
    '#upload_validators' => array(
      'file_validate_extensions' => array('csv'),
      'file_validate_size' => array(32*1024*1024),
    ),
  );
  

Как я могу пропустить CSV-файл через средство проверки?

Ответ №1:

Я смог сделать это с помощью следующего кода в перехватчике проверки формы.

 function mymodule_myform_validate($form, $form_state) {
  $validators = array('file_validate_extensions' => array('csv'));
  $file = file_save_upload('zipdata_file', $validators);
  ...
}
  

Комментарии:

1. Это помогает, спасибо 🙂 <br/> <br/> Для Drupal 7 этих ссылок api.drupal.org/api/drupal/includes!file.inc/function /… и api.drupal.org/api/drupal/includes!file.inc/function/… может помочь

Ответ №2:

Если вы посмотрите на ссылку на API forms, в этом комментарии объясняется, как это сделать.

Я не могу точно проверить это, но, возможно, что-то вроде этого

   $form['data_file'] = array(
    '#type' => 'file',
    '#title' => t('Data File'),
    '#description' => t('CSV file to upload.'),
    '#upload_validators' => array(
      'file_validate_extensions' => array(0 => 'csv'),
      'file_validate_size' => array(32*1024*1024),
    ),
  );
  

Комментарии:

1. Я не вижу там вашей реализации file_validate_extensions.

2. $form[‘file’][‘#upload_validators’][‘file_validate_extensions’][0] = ‘png jpg gif pdf’; Это было всего несколько строк вверх по странице.

3. Однако вы отредактировали свой пост. у вас был array(‘0’ => array(‘csv’)). То, что у вас есть сейчас, — это именно то, что создает моя оригинальная версия.

4. Теперь, когда я думаю об этом, он автоматически переходит к индексу 0 массива. Таким образом, это будет то же самое, что вы изначально опубликовали. Я только что отредактировал его еще раз. Если это не сработает, я понятия не имею.

Ответ №3:

Ваша функция формы

 // don't forget this line
$form['#attributes'] = array('enctype' => "multipart/form-data");

$form['container']['csv_file'] = array(
'#type' => 'file' ,  
'#title' => t('csv FILE') , 
'#description' => t('insert your csv file here') , 
) ; 
  

Ваша функция проверки

 function _your_function_validate($form, $form_state) {
$extensions = 'csv' ; 
$validators = array(
 'file_validate_extensions' => array($extensions),
);
// if the file not uploaded or the extension is wrong set error
if(!file_save_upload('csv_file', $validators)) { // cvs_file is the form name
  form_set_error('csv_file', 'Please select the csv file') ;    
}else{ 
// now the form is uploaded lets make another validation for extension
  $file = file_save_upload('csv_file', $validators, file_directory_path()) ; 

// another validator for the extension
if($file->filemime != 'text/csv' ) {
 form_set_error('csv_file', 'Extensions Allowed : csv') ;       
}       
}       
}
  

Комментарии:

1. Обратите внимание, что в D7 вам не нужен атрибут enctype в форме. Drupal автоматически добавляет его для полей файлов.