Загрузка файлов средствами Form API

Пример загрузки картинки с помощью Form API:

/**
 * Form builder
 */
function mymodule_myform() {
  $form['file'] = array(
    '#type' => 'file',
    '#title' => 'Картинка',
    '#description' => 'Выберите файл с расширением jpg, jpeg, png или gif',
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Отправить',
  );
  return $form;
}
 
/**
 * Form validate callback
 */
function mymodule_myform_validate($form, &$form_state) {
  $validators = array(
    'file_validate_is_image' => array(), // Проверка, действительно ли файл является изображением
    'file_validate_extensions' => array('png gif jpg jpeg'), // Проверка на расширения
    'file_validate_size' => array(1 * 1024 * 1024), // Проверка на размер файла (максимум 1mb)
  );
  // Загружаем файл в sites/default/files (по умолчанию)
  if ($file = file_save_upload('file', $validators, 'public://')) {
    $form_state['values']['file'] = $file; // передаём информацию о файле в ф-ю mymodule_form_submit()
  }
  else {
    form_set_error('file', 'Файл не был загружен');
  }
}
 
/**
 * Form submit callback
 */
function mymodule_myform_submit($form, &$form_state) {
  $file = $form_state['values']['file'];
  $file->status = FILE_STATUS_PERMANENT; // Изменяем статус файла на "Постоянный"
  file_save($file); // Сохраняем новый статус
  drupal_set_message('Картинка загружена');
}

Важно помнить, что ф-я file_save_upload() загружает файл и помечает его как "Временный", поэтому в submit-е формы нужно всегда изменять статус файла на "Постоянный" (FILE_STATUS_PERMANENT) и вызывать file_save().
Написанное актуально для
Drupal 7
Теги:
upload, работа с файлами, работа с формами
Добавлено: 29 Июля 2018 20:26:33 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...