Проверьте имя файла в функции загрузки файлов CodeIgniter - PullRequest
2 голосов
/ 13 января 2012

Я использую следующую функцию CodeIgniter для загрузки файлов, которая работает нормально:

function uploadFiles(){

         $this->load->library('upload');
         $error = 0;    
         $projectName = $_POST['projectname'];
         $projectID = $_POST['maxid'];
         $folderName = $this->config->item('upload_dest')."/".$projectName."_".$projectID;
         if(!file_exists ($folderName)){
             $aa = mkdir($folderName);
         }

         $config['upload_path']   = $folderName;
         $config['allowed_types'] = 'xml';
         //$config['allowed_types'] = '*';
         $config['max_size']      = '0';
         $config['overwrite']     = TRUE;

         $this->upload->initialize($config);

         for($i=0; $i<count($_FILES['files']['name']); $i++)
         {

           $_FILES['userfile']['name']    = $_FILES['files']['name'][$i];
           $_FILES['userfile']['type']    = $_FILES['files']['type'][$i];
           $_FILES['userfile']['tmp_name'] = $_FILES['files']['tmp_name'][$i];
           $_FILES['userfile']['error']       = $_FILES['files']['error'][$i];
           $_FILES['userfile']['size']    = $_FILES['files']['size'][$i];

              if($this->upload->do_upload())
              {
                $error += 0;
              }else{
                $error += 1;
              }
         }

         if($error > 0){ 
            $this->upload->display_errors();
            return FALSE; 
         }
         else{ 
            return TRUE; 
         }

    }

Что мне нужно сделать - проверить, чтобы убедиться, что хотя бы один из загружаемых файлов являетсяназванный "etl".Если такого файла нет в списке файлов, выбранного пользователем - остановите действие, ничего не загружайте и верните ошибку проверки формы.Кто-нибудь может посоветовать это?

Спасибо.

Ответы [ 2 ]

1 голос
/ 14 января 2012

Во-первых, от php нет способа получить имя файла (ов) перед загрузкой, вы должны загрузить, чтобы получить свойства файла.Итак, доступны следующие параметры:

(1) Разрешить загрузку файлов, затем получить имена и проверить, содержит ли какой-либо из них «etl».Если не содержит того, что вы ищете, то удалите только что загруженные файлы и установите собственное сообщение об ошибке самостоятельно.Этот подход имеет очень большие накладные расходы, позволяя вам сначала загрузить то, что не нужно, а затем удалить его.Очень плохо, но решает проблему.

(2) С другой стороны, это решение javascript.Дайте полям загрузки общее имя класса, например "userfile1", "userfile2", .......

, затем из вашего javascript и с помощью jquery перехватите отправку формы, затем используйте цикл forчтобы получить значения каждого поля загрузки файла, из которого вы можете получить полное имя и расширение файла, а затем выполнить сравнение «etl».

т.е.

<script type="text/javascript" >
  $("#formname").submit(function(){
    $(".classname").each(function(){
      if($(this).val().indexOf("etl") != -1 ){
        return true;
      }
    });
    /*
     *whatever makes it finish executing that loop and the execution of code gets 
     *to this point, then the string "etl" was not found in any of the names.
     */
     // write a piece of code to show an hidden error field
     $("#hidden_error_div").text("Your error message").show();
     return false;  //makes sure the form is not submitted.
  });
</script>

Надеюсь, это поможет.

0 голосов
/ 14 января 2012

Oyekunmi предлагает хорошее решение javascript для перехвата до того, как оно действительно попадет на сервер. Как отмечает Ойекунми, когда он туда попадает, он попадает туда как пакет, так что вы можете хранить и обрабатывать его во временном каталоге, оценивать каждый файл и обрабатывать его соответствующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...