2015-01-08 4 views
3

Привет, У меня есть файл и контроллер для просмотра, что делает несколько входов, где я могу загружать файлы в папку, но загружая только один файл в папку. Я знаю, в чем проблема, но я не знаю, как это исправить или как это сделать.Несколько файлов в папке

Мой контроллер:

public function uploadFile() { 
     $filename = ''; 
      if ($this->request->is('post')) { // checks for the post values 
       $uploadData = $this->data['files']; 
       //print_r($this->data['files']); die; 
       if ($uploadData['size'] == 0 || $uploadData['error'] !== 0) { // checks for the errors and size of the uploaded file 
        echo "Failide maht kokku ei tohi olla üle 5MB"; 
        return false; 
       } 
       $filename = basename($uploadData['name']); // gets the base name of the uploaded file 
       $uploadFolder = WWW_ROOT. 'files'; // path where the uploaded file has to be saved 
       $filename = $filename; // adding time stamp for the uploaded image for uniqueness 
       $uploadPath = $uploadFolder . DS . $filename; 
       if(!file_exists($uploadFolder)){ 
        mkdir($uploadFolder); // creates folder if not found 
       } 
       if (!move_uploaded_file($uploadData['tmp_name'], $uploadPath)) { 
        return false; 
       } 
       echo "Sa sisestasid faili(d): $filename"; 

      }   
    } 

Мой Просмотр файла:

<?php 
    echo $this->Form->create('uploadFile', array('type' => 'file')); 
?> 

    <div class="input_fields_wrap"> 

     <label for="uploadFilefiles"></label> 
     <input type="file" name="data[files]" id="uploadFilefiles"> 

    </div> 

<button type="button" class="add_field_button">+</button> <br><br> 

    <form name="frm1" method="post" onsubmit="return greeting()"> 
     <input type="submit" value="Submit"> 
    </form> 

<?php 
echo $this->Html->script('addFile'); 

И это сценарий, что Im используя в Вид:

$(document).ready(function() { 
    var max_fields  = 3; 
    var wrapper   = $(".input_fields_wrap"); 
    var add_button  = $(".add_field_button"); 

    var x = 1; 
    $(add_button).click(function(e){ 
     e.preventDefault(); 
     if(x < max_fields){ 
      x++; 
      $(wrapper).append("<div><input type='file' name='data[files]' id='uploadFilefiles'/><a href='#' class='remove_field'>Kustuta</a></div>"); 
     } 
    }); 

     $(wrapper).on("click",".remove_field", function(e){ //user click on remove text 
      e.preventDefault(); $(this).parent('div').remove(); x--; 
     }) 
}); 

Я думаю, что проблема заключается в именах ввода. Если Im делает больше входных данных, то имена входов одинаковы, и благодаря этому он загружает только один файл в папку webroot/files, но я хочу все это.

Может кто-нибудь помочь мне или дать мне несколько советов. Спасибо!

+0

имя = 'данные [файлы] [] – violator667

+0

Да Я знаю, что мне нужно сделать что-то вроде этого, но если я просто добавлю [] для просмотра и создания скрипта, сделав то же самое, загрузив только один файл. – hammasta

+0

Он создает массив, вы должны перебирать массив и размещать функцию загрузки внутри цикла. Проверьте мой ответ ниже. –

ответ

1

Вот кто-то с почти точно такой же вопрос, как у вас есть: Create multiple Upload File dynamically

Try делать то же самое. Я не программировал PHP в течение некоторого времени, но думаю, вы должны заменить data[files] на data[], поэтому он создает новый элемент массива для каждого поля. Теперь вы даете каждому полю одно и то же имя.

Тогда вы можете цикл над ними в контроллере с помощью:

foreach($_FILES['data'] as $file){ 
    //do stuff with $file 
} 

EDIT 2: Как вы говорите, вы хотите, чтобы загрузить файлы (не БД). Таким образом, я предполагаю, что это должно работать:

public function uploadFile() { 
     $filename = ''; 
      if ($this->request->is('post')) { // checks for the post values 
       $uploadData = $this->data; 
       foreach($uploadData as $file){ 

       if ($file['size'] == 0 || $file['error'] !== 0) { // checks for the errors and size of the uploaded file 
        echo "Failide maht kokku ei tohi olla üle 5MB"; 
        return false; 
       } 
       $filename = basename($file['name']); // gets the base name of the uploaded file 
       $uploadFolder = WWW_ROOT. 'files'; // path where the uploaded file has to be saved 
       $filename = $filename; // adding time stamp for the uploaded image for uniqueness 
       $uploadPath = $uploadFolder . DS . $filename; 
       if(!file_exists($uploadFolder)){ 
        mkdir($uploadFolder); // creates folder if not found 
       } 
       if (!move_uploaded_file($file['tmp_name'], $file)) { 
        return false; 
       } 
       echo "Sa sisestasid faili(d): $filename"; 

      }  
     }  
    } 
+0

'Уведомление (8): Неопределенный индекс: tmp_name [APP \ Controller \ UploadFileController.php, строка 22]' – hammasta

+0

все еще имел uploadData, определенный в некоторых строках, только что изменил его на файл;) повторите попытку haha ​​ –

+0

'Warning (2): move_uploaded_file() ожидает, что параметр 2 является строкой, заданный массив [APP \ Controller \ UploadFileController.php, строка 22] ' – hammasta

0

Попробуйте эту функцию:

function multi_upload($file_id, $folder="", $types="") { 
     $all_types = explode(",",strtolower($types)); 
     foreach($_FILES[$file_id]['tmp_name'] as $key => $tmp_name){ 
      if(!$_FILES[$file_id]['name'][$key]){ 
       $return[$key]= array('','No file specified'); 
       continue; 
      } 
      $file_title = $_FILES[$file_id]['name'][$key]; 
      $ext_arr = pathinfo($file_title, PATHINFO_EXTENSION); 
      $ext = strtolower($ext_arr); //Get the last extension 
      //Not really uniqe - but for all practical reasons, it is 
      $uniqer = substr(md5(uniqid(rand(),1)),0,5); 
      $file_name = $uniqer . '_' . $file_title;//Get Unique Name 
      if($types!=''){ 
       if(in_array($ext,$all_types)); 
       else { 
        $result = "'".$_FILES[$file_id]['name'][$key]."' is not a valid file."; //Show error if any. 
        $return[$key]= array('',$result); 
        continue; 
       } 
      } 
      //Where the file must be uploaded to 
      if($folder) $folder .= '/';//Add a '/' at the end of the folder 
      $uploadfile = $folder . $file_name; 
      $result = ''; 
      //Move the file from the stored location to the new location 
      if (!move_uploaded_file($_FILES[$file_id]['tmp_name'][$key], $uploadfile)) { 
       $result = "Cannot upload the file '".$_FILES[$file_id]['name'][$key]."'"; //Show error if any. 
       if(!file_exists($folder)) { 
        $result .= " : Folder don't exist."; 
        } elseif(!is_writable($folder)) { 
        $result .= " : Folder not writable."; 
        } elseif(!is_writable($uploadfile)) { 
        $result .= " : File not writable."; 
       } 
       $file_name = ''; 
      } 
      else { 
       if(!$_FILES[$file_id]['size']) { //Check if the file is made 
        @unlink($uploadfile);//Delete the Empty file 
        $file_name = ''; 
        $result = "Empty file found - please use a valid file."; //Show the error message 
       } 
       else { 
        @chmod($uploadfile,0777);//Make it universally writable. 
       } 
      } 
      $return[$key]=array($file_name,$result); 
     } 
     return $return; 
    } 

HTML: <input type="file" name="data_file[]" id="uploadFilefiles">

Позвоните по multi_upload("data_file","upload_to_folder","pdf,jpg,txt,bmp")

+0

'Предупреждение (2): Отсутствует аргумент 1 для UploadFileController :: Uploadfile() [APP \ Controller \ UploadFileController.php, строка 5] Уведомление (8): Неопределенная переменная: file_id [APP \ Controller \ UploadFileController.php, строка 7] Уведомление (8): Неопределенный индекс: [APP \ Controller \ UploadFileController.php, строка 7] Предупреждение (2): Недействительный аргумент, предоставленный foreach() [APP \ Controller \ UploadFileController .php, line 7] Уведомление (8): Неопределенная переменная: return [APP \ Controller \ UploadFileController.php, строка 54] ' – hammasta

+0

У меня нет идентификатора файла, что мне нужно делать с этими строками? – hammasta

+0

как вы называете эту функцию. первым аргументом будет имя входного файла. если имя_файла 'upload_file []' then' upload_file' –

Смежные вопросы