2012-03-30 9 views
4

複数の画像をアップロードしようとしていて、複数のファイルをブラウズして選択できるようにjqueryプラグインを設定しました。複数のファイルをアップロードするuserfile [] array?

私が抱えている唯一の問題は、コントローラのファイルアレイにアクセスすることです。どのようにすればいいですか?ありがとう。

ビュー:

<input type="file" name="userfile[]" id="userfile" class="multi" /> 

答えて

8

Iを検索するビットが完璧な機能を見つけた後、私は、昨年のプロジェクトでこれと同じ問題がありました。

私はそれを信用できませんが、誰かが知っていれば、私が見つけた場所を思い出すことはできません。

function multiple_upload($upload_dir = 'uploads', $config = array()) 
{ 
    $files = array(); 

    if(empty($config)) 
    { 
     $config['upload_path'] = '../path/to/file'; 
     $config['allowed_types'] = 'gif|jpg|jpeg|jpe|png'; 
     $config['max_size']  = '800000000'; 
    } 

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

     $errors = FALSE; 

     foreach($_FILES as $key => $value) 
     {    
      if(! empty($value['name'])) 
      { 
       if(! $this->upload->do_upload($key)) 
       {           
        $data['upload_message'] = $this->upload->display_errors(ERR_OPEN, ERR_CLOSE); // ERR_OPEN and ERR_CLOSE are error delimiters defined in a config file 
        $this->load->vars($data); 

        $errors = TRUE; 
       } 
       else 
       { 
        // Build a file array from all uploaded files 
        $files[] = $this->upload->data(); 
       } 
      } 
     } 

     // There was errors, we have to delete the uploaded files 
     if($errors) 
     {      
      foreach($files as $key => $file) 
      { 
       @unlink($file['full_path']);  
      }      
     } 
     elseif(empty($files) AND empty($data['upload_message'])) 
     { 
      $this->lang->load('upload'); 
      $data['upload_message'] = ERR_OPEN.$this->lang->line('upload_no_file_selected').ERR_CLOSE; 
      $this->load->vars($data); 
     } 
     else 
     { 
      return $files; 
     } 
    } 

は、今では私が使用したので、しばらくしている...フォームはこの

<input type="file" name="userfile"/> 
<input type="file" name="userfile2" /> 
<input type="file" name="userfile3" /> ..etc 

それとも

<input type="file" name="userfile[]" /> 

機能のような名前のファイルがあることを確認しますあなたがそれを設定するために余分な助けを必要とするなら、私に知らせてください。

+0

おかげで、私は実際にそれを把握することができました... hooray! –

+0

私はCodeigniterが ''のような複数のファイル入力をサポートしていないことは嫌いです。この「解決策」は実際の回避策です。しかし、私はこの解決策が最高のものであることを改めて証明しなければなりません。 – machineaddict

+0

こんにちは、私はちょうど私のHTMLフォームも存在する1ページが必要なときにこれを設定する方法のヘルプをお願いしたいと思います。私は自分のフォームを提出しています。そして、私はそれにどのパラメータを渡すべきですか?ありがとう – propaganja

0

上記のojjwoodによって提供されるHTMLは、複数の入力ボックスを生成します。入力ボックスを1つしか持たずに複数のファイルをアップロードしたい場合は、<input>要素に属性multiple="multiple"を含める必要があります。 []name="userfile[]"で、投稿されたデータを単一の値ではなく配列にすることができます。

Codeigniter/PHP側では、配列の操作に$this->input->post('userfile')の代わりに$_POST['userfileを使用する必要があります。

1

データを受け取る行為で次のように開発されたhtml要素array []を使用して複数のアップロードを使用するには、グローバル変数$ _FILES PHPを使用して、do_upload関数を後で読み込むことができます。参照してください:

  #copy the original array;    
      $temp_array; 
      foreach($_FILES['fil_arquivo'] as $key => $val) 
      { 
       $i = 0; 
       foreach($val as $new_key) 
       { 
        $temp_array[$i][$key] = $new_key; 
        $i++; 
       } 
       // 
      } 

      $i = 0; 
      foreach($temp_array as $key => $val) 
      { 
       $_FILES['file'.$i] = $val; 
       $i++; 
      } 

      #clear the original array; 
      unset($_FILES['fil_arquivo']); 

      $upload_path = 'media/arquivos'; 

      $config['upload_path'] = $upload_path; 
      $config['allowed_types'] = 'doc|docx|xls|xlsx|ppt|pptx|pdf|txt|jpg|png|jpeg|bmp|gif|avi|flv|mpg|wmv|mp3|wma|wav|zip|rar'; 
      $config['encrypt_name'] = true; 

      $this->upload->initialize($config); 
      foreach($_FILES as $key => $value) 
      {    
       if(! empty($value['name'])) 
       { 
        if($this->upload->do_upload($key)) 
        {           
         $this->upload->data(); 
        } 
       } 
      } 
関連する問題