2015-10-06 22 views
10

如何在codeigniter 3.0.1中上傳多個文件。在stackoverflow中有類似的問題和解決方案,但不幸的是他們都不能解決我所面臨的問題。如何在codeigniter 3.0.1中上傳多個文件

這是出現You did not select a file to upload我目前的代碼

視圖(addGallery)

<section> 
    <h2>Add Gallery</h2> 
     <?php echo form_open('Newsupload/gallery', ['id'=>'news', 'name'=>'news', 'method'=>'post','enctype'=>'multipart/form-data']) ?> 

     <div class="grp width-50"> 
      <label for="name">Album Name</label> 
      <input type="text" name="name" id="name" value="" placeholder=""> 
     </div> 
     <div class="grp width-100"> 
      <div id="selectedFiles"></div> 
      <input type="file" id="files" name="files[]" multiple size="20"><br/> 
     </div> 
     <?php if (isset($error)) { 
      echo $error; 
     } ?> 
     <grp class="grp width-100"> 
      <button>Add</button> 
     </grp> 
    </form> 
</section> 

控制器(畫廊)

public function gallery() 
{ 

    $this->load->library('upload'); 

    $files = $_FILES; 
    $cpt = count($_FILES['files']['name']); 
    for($i=0; $i<$cpt; $i++) 
    {   
     $_FILES['files']['name']= $files['files']['name'][$i]; 
     $_FILES['files']['type']= $files['files']['type'][$i]; 
     $_FILES['files']['tmp_name']= $files['files']['tmp_name'][$i]; 
     $_FILES['files']['error']= $files['files']['error'][$i]; 
     $_FILES['files']['size']= $files['files']['size'][$i];  

     $this->upload->initialize($this->set_upload_options()); 
     // $this->upload->do_upload('files[]'); 
     if (!$this->upload->do_upload('files[]')) 
     { 
      $error =['error' => $this->upload->display_errors()]; 
      $this->load->view('admin/addGallery', $error); 
     } 
    } 
} 
public function set_upload_options() 
{ 
    $config['upload_path'] = getcwd().'/upload/'; 
    $config['allowed_types'] = 'gif|jpg|jpeg|png'; 
    $config['remove_spaces'] = true; 
    return $config; 
} 
+0

$這個 - > upload-> do_upload( '文件'); –

回答

2

我認爲你需要的錯誤信息改變這一行:

if (!$this->upload->do_upload('files[]')) 

if (!$this->upload->do_upload('files')) 
0

試試這個:

 $files = $_FILES; 
     $cpt = count($_FILES['files']['name']); 
     for($i=0; $i<$cpt; $i++) 
     { 
     $_FILES['files']['name']= $files['files']['name'][$i]; 
     $_FILES['files']['type']= $files['files']['type'][$i]; 
     $_FILES['files']['tmp_name']= $files['files']['tmp_name'][$i]; 
     $_FILES['files']['error']= $files['files']['error'][$i]; 
     $_FILES['files']['size']= $files['files']['size'][$i]; 
     $this->upload->initialize($this->set_upload_options()); 
     $this->upload->do_upload(); 
     $fileName = $_FILES['files']['name']; 
     $images[] = $fileName; 

,並使用笨試試這個http://w3code.in/2015/09/upload-file-using-codeigniter/

使功能set_upload_options()

$config = array(); 
     $config['upload_path'] = './upload/'; //give the path to upload the image in folder 
     $config['allowed_types'] = 'gif|jpg|png'; 
      $config['max_size'] = '0'; 
     $config['overwrite'] = FALSE; 
    return $config; 

更多上傳多個文件

+0

我想這個代碼,但我得到給出錯誤的嚴重性:注意 消息:未定義的變量:_file 文件名:庫/ upload.php的 行號:408 –

+0

假如你做的函數set_upload_options()? – Ricky

2

你沒有通過文件名來上傳function.Try this。

if (!$this->upload->do_upload($_FILES['files']['name'])) 
     { 
      $error =['error' => $this->upload->display_errors()]; 
      $this->load->view('admin/addGallery', $error); 
} 
0

請嘗試波紋管

for($i=0; $i<$cpt; $i++) 
{   
    $_FILES['files'] = $files[$i]; 
    $this->upload->initialize($this->set_upload_options()); 
    if (!$this->upload->do_upload('files')) 
    { 
     $error =['error' => $this->upload->display_errors()]; 
     $this->load->view('admin/addGallery', $error); 
    } 
} 
0

您可以在一個請求上傳使用CodeIgniter多個文件。你只需要爲每個文件做​​3210。這裏有一個實現。如果需要,您可以將它工作到一個循環中。

// Image upload Config 
    $config['upload_path'] = './uploads/'; 
    $config['allowed_types'] = 'gif|jpg|jpeg|png'; 
    $config['max_size']  = '1000000'; 
    $config['encrypt_name'] = TRUE; 
    $this->load->library('upload', $config); 

    // Upload Files 
    if ($_FILES['first_file']['name'] && $this->upload->do_upload('first_file')) { 
     $first_file = $this->upload->data(); 
    } 
    if ($_FILES['second_file']['name'] && $this->upload->do_upload('second_file')) { 
     $second_file= $this->upload->data(); 
    } 
0

只是我從圖書館$this->upload->do_upload('inputelementname')理解不必輸入元素名稱。它應該是文件數組的關鍵。

所以在這種情況下這應該工作

if($_FILES){ 
       $filecount=count($_FILES['addmediaelement']['name']); 
       for($i=0; $i<$filecount; $i++){ 
        $_FILES['mediaelement']['name']=$_FILES['addmediaelement']['name'][$i]; 
        $_FILES['mediaelement']['type']=$_FILES['addmediaelement']['type'][$i]; 
        $_FILES['mediaelement']['tmp_name']=$_FILES['addmediaelement']['tmp_name'][$i]; 
        $_FILES['mediaelement']['error']=$_FILES['addmediaelement']['error'][$i]; 
        $_FILES['mediaelement']['size']=$_FILES['addmediaelement']['size'][$i]; 

        $config['upload_path']=path/to/save/file; 
        $config['file_name']=filealternatename.extension; 
        $config['max_size']=MAXSIZE; //max size constant 
        $config['max_width']=MAXWIDTH; //max width constant 
        $config['max_height']=CMPMAXHEIGHT; //max height constant 
        $config['allowed_types']='jpg|png'; 

        if(!is_dir($config['upload_path'])){ 
         mkdir($config['upload_path'], 0775); 
        } 
        $this->upload->initialize($config); 
        $imageuploaderres[]=$this->upload->do_upload('mediaelement'); 
       } 
      }