【问题标题】:Multiple upload in codeigniter在codeigniter中多次上传
【发布时间】:2017-02-03 06:22:41
【问题描述】:

现在我尝试创建一个表单字段来实现一些上传文件。例如,我在一个表单中上传了 A、B 和 C 等字段。我只想上传所有文件一次提交并将文件名保存在mysql中的同一列中,如下所示:

|编号 |文件名_A |文件名_B |文件名_C |

我很困惑如何将它插入 mysql。有办法制作这样的学习案例吗? 我会告诉你代码。 非常感谢。

控制器文件:

function index(){
        $data = array();
        if($this->input->post('fileSubmit') && !empty($_FILES['userFiles']['name'])){
            $filesCount = count($_FILES['userFiles']['name']);
            for($i = 0; $i < $filesCount; $i++){
                $_FILES['userFile']['name'] = $_FILES['userFiles']['name'][$i];
                $_FILES['userFile']['type'] = $_FILES['userFiles']['type'][$i];
                $_FILES['userFile']['tmp_name'] = $_FILES['userFiles']['tmp_name'][$i];
                $_FILES['userFile']['error'] = $_FILES['userFiles']['error'][$i];
                $_FILES['userFile']['size'] = $_FILES['userFiles']['size'][$i];

                $uploadPath = 'uploads';
                $config['upload_path'] = $uploadPath;
                $config['allowed_types'] = 'gif|jpg|png';

                $this->load->library('upload', $config);
                $this->upload->initialize($config);
                if($this->upload->do_upload('userFile')){
                    $fileData = $this->upload->data();
                    $uploadData[$i]['file_name'] = $fileData['file_name'];
                }
            }
            if(!empty($uploadData)){
                $insert = $this->file->insert($uploadData);
                $statusMsg = $insert?'Files uploaded successfully.':'Some problem occurred, please try again.';
                $this->session->set_flashdata('statusMsg',$statusMsg);
            }
        }

模型文件:

public function insert($data = array()){
        $insert = $this->db->insert_batch('files',$data);
        return $insert?true:false;
    }

查看文件:

<div class="form-group">
                    <label>Choose File A</label>
                    <input type="file" class="form-control" name="userFiles[]" multiple/>
                </div>
                <div class="form-group">
                    <label>Choose Files B</label>
                    <input type="file" class="form-control" name="userFiles[]" multiple/>
                </div>
                <div class="form-group">
                    <label>Choose Files C</label>
                    <input type="file" class="form-control" name="userFiles[]" multiple/>
                </div>
                <div class="form-group">
                    <input class="form-control" type="submit" name="fileSubmit" value="UPLOAD"/>
                </div>

【问题讨论】:

    标签: php mysql codeigniter file-upload


    【解决方案1】:

    我不确定您在尝试什么,我可以推荐 dropzone 来查询您的文件并一一上传。请在此处找到示例。 rag-drop-file-upload-dropzone-js-codeigniter

    【讨论】:

      【解决方案2】:

      我真的很难理解这段代码是否真的有效(我认为你已经遇到麻烦了,如果你覆盖了全局 FILES 数组)

      试试这样的

      你的控制器:

      function index()
      {
          $arrLetters = range("A","C");
          $arrDBData = array();
          $files = $_FILES;
          $countFiles = count($_FILES['userFiles']['name']);
      
      
          for($i=0; $i<$countFiles; $i++)
          {           
              $_FILES['userFiles']['name']= $files['userFiles']['name'][$i];
              $_FILES['userFiles']['type']= $files['userFiles']['type'][$i];
              $_FILES['userFiles']['tmp_name']= $files['userFiles']['tmp_name'][$i];
              $_FILES['userFiles']['error']= $files['userFiles']['error'][$i];
              $_FILES['userFiles']['size']= $files['userFiles']['size'][$i];    
      
              $uploadPath = 'uploads';
              $config = array(
                  'upload_path'   =>  $uploadPath,
                  'allowed_types' =>  'gif|jpg|png'
              );
      
              $this->upload->initialize($config);
              if ($this->upload->do_upload())
              {
                  $arrDBData["filename_".$arrLetters[$i]] = $files['userFiles']['name'][$i];
              }
      
          }
      
          $this->file->insert($arrDBData);
      }
      

      你的模型可能看起来像

      public function insert($data = array())
      {
          if (count($data) > 0)
          {
              $insert = $this->db->insert('files',$data);
              return $insert?true:false;
          }
          return false;
      }
      

      很遗憾,如果我错了,请纠正我,CI 没有为多次上传提供合理的处理。 (我没有找到任何东西 Codeigniter Upload Documentation)

      【讨论】:

        【解决方案3】:

        Downlaod this Codeigniter Library and put this file under application/libraries

        在你的控制器中这样使用

        if ($_FILES) {
                $config['upload_path']   = './uploads/';
                $config['allowed_types'] = 'gif|jpg|png';
                $config['max_size']      = '200';
                $config['max_width']     = '1024';
                $config['max_height']    = '768';
                $this->load->library('upload');
                $this->upload->initialize($config);
                if (!$this->upload->do_multi_upload("file")) {
                    $data['errors'] = ($this->upload->display_errors());
                } else {
                    $images = ($this->upload->get_multi_upload_data());
                    for ($i = 0; $i < count($images); $i++) {
                    $this->user_model->addUserImage($images[$i]);
                    }
                }
        

        并像这样将文件保存在模型中

        public function addUserImage($image)
        {
            $image_data=array(
                'name'=>$image['file_name']
            );
            $this->db->insert('user_images',$image_data);
            return true;
        }
        

        如果您遇到任何问题,请告诉我

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-09
          • 1970-01-01
          • 2013-01-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多