Проблема: загрузка файлов из формы

Главные вкладки

Аватар пользователя archick archick 26 апреля 2009 в 0:39

В скрипте ниже я хочу реализовать загрузку файлов из формы на странице. Все бы хорошо, но проблема возникает с функцией file_check_upload. Встречал ее во многих кодах на drupal.org, но в api ее не обнаружил. Может кто-то подскажет альтернативу этой функции в моем случае?
В друпле я новичок.
Благодарю.

 <?

function csv_import_menu() {

  $items = array();

  $items['admin/pagegood'] = array('title' => t('Тест'),
     'page callback' => '_csv_import_page',
     'page arguments' => array(1),
     'access arguments' => array('access administration menu'),
     'type' => MENU_NORMAL_ITEM,
  );

return $items;
}

function csv_import_form() {
  $form['#attributes'] = array('enctype' => "multipart/form-data");

  $form['file_upload'] = array (
    '#type' => 'file',
    '#title' => t('Загрузить .csv файл'),
    '#size'  => 60,
  );

  $form['submit'] = array(
   '#type' => 'submit',
   '#value' => t('Загрузить'),
  );

  return $form;
}

function csv_import_form_submit ($form_id, $form_values){

  $file=file_check_upload('file_upload');

  if ($file == true) {
    $file=file_save_upload($file,'/upload');
    drupal_set_message(t('Успешно!'));
  }
  else {
    drupal_set_message(t('Не удалось загрузить!'));
  }

}

function _csv_import_page($page){

        return drupal_get_form('csv_import_form');

  return ($page);
}

?>

Комментарии

Аватар пользователя gorr gorr 26 апреля 2009 в 14:39

А теперь ее код перекочевал в саму file_save_upload().
Как пример использования смотрим в модуль upload:
<?php
// Save new file uploads.
if (user_access('upload files') && ($file = file_save_upload('upload', $validators, file_directory_path()))) {
?>

Аватар пользователя archick archick 27 апреля 2009 в 0:28

gorr, натолкнули меня на мысль, спасибо :).
Но сейчас все-равно остается заминка. Появляется ошибка - "The selected file 'file' could not be uploaded, because the destination is not properly configured." То есть, он не хочет идти дальше папки tmp.
Насколько я понимаю - где-то не установлено конечное назначение файла. Подскажите что не так, если Вам известно.

Код для загрузки из форм теперь такой:

function csv_import_form() {
  $form['#attributes'] = array('enctype' => "multipart/form-data");

  return $form;
}

function csv_import_form_alter(&$form, $form_id){

 if ($form_id == 'csv_import_form');{

  $form['#attributes']['enctype'] = 'multipart/form-data';

  $form['csv']=array('#type' => 'file',
  '#title' => 'Загрузить .csv',
  '#size' => 60,
  );

  $form['submit']=array(
  '#type'=>'submit',
  '#value'=>'Загрузить',
  );

        $form['#validate'][]='csv_validate_ext';

  }
}

function csv_validate_ext (&$form, &$form_state){
 $validators=array ();

 if ($file=file_save_upload('csv',$validators)){

  file_move($file,'/upload/1.csv');
  }
  else {
  drupal_set_message(t('Не удалось загрузить!'));
  }

}

Аватар пользователя gorr gorr 27 апреля 2009 в 12:01

Из вашего /upload/l.csv внутри папки для загрузок друпала получается так files//upload/l.csv, думаю ошибка в этом. Надо писать upload/l.csv.

Аватар пользователя archick archick 27 апреля 2009 в 20:39

gorr, ошибка моя была в том, что я создал папку upload не в sites/default/files, а в корне друпала.
Большое спасибо вам за помощь!