web-dev-qa-db-ja.com

codeigniter 3.0.1で複数のファイルをアップロードする方法

Codeigniter 3.0.1で複数のファイルをアップロードする方法Stackoverflowにも同様の問題と解決策がありますが、残念ながら、それらのどれも私が直面している問題の解決に役立っていません。

これは、現在のコードとともに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;
}
12
naseeba c

デフォルトでは、codeIgniterは複数ファイルのアップロードをサポートしていません。したがって、このライブラリを使用できます CodeIgniter Multiple Upload Library

2
Sanoob

この行を変更する必要があると思います。

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

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

アップロード機能にファイル名を渡しませんでした。これを試してください。

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

1回のリクエストでCodeIgniterを使用して複数のファイルをアップロードできます。ファイルごとにdo_upload()を実行するだけです。これが1つの実装です。必要に応じて、ループに組み込むことができます。

    // 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
Goose

以下をお試しください

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
Mitul

ライブラリから理解したこと$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');
              }
          }
0
Sandeep Pujare

これを試して:

      $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;

そして、関数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;

Codeigniterを使用して複数のファイルをさらにアップロードするには、これを試してください http://w3code.in/2015/09/upload-file-using-codeigniter/

0
Ricky