2015-10-06 74 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'); 
       } 
      }