在codeigniter中上传多张图片

时间:2018-08-22 10:05:57

标签: codeigniter file-upload

HTML代码

<?php echo form_open_multipart('upload/do_upload');?>
<input type="file" name="file1" size="20" />
<input type="file" name="file2" size="20" />
<input type="submit" value="upload" />
</form>

控制器代码

public function do_upload()
    {
            $pic1 = "Name One";
            $pic2 = "Name Two";
            $RealName = array('file1', 'file2' );
            $ChangeName = array($pic1, $pic2 );
            $arrlength = count($ChangeName);

           for($x = 0; $x < $arrlength; $x++)
           {
            $config['upload_path']          = './uploads/';
            $config['file_name']          = $ChangeName[$x];
            $config['allowed_types']        = 'gif|jpg|jpeg|png';
            $config['max_size']             = 1909900;
            $this->load->library('upload', $config);
            $this->upload->do_upload($RealName[$x]);
            echo $ChangeName[$x]; echo "<br>";
            echo $RealName[$x]; echo "<br>";
           }
    }

尝试上传多张图片。代码可以正确运行,但是在保存所有图片时遇到了一些问题。问题是保存所有具有相同名称(名称一)的图片。

2 个答案:

答案 0 :(得分:0)

如果要从一个输入上载多个文件,此代码可能对您有用。 以供参考 : https://www.codexworld.com/codeigniter-upload-multiple-files-images/
例如:

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

                    // File upload configuration
                    $uploadPath = 'uploads/files/';
                    $config['upload_path'] = $uploadPath;
                    $config['allowed_types'] = 'jpg|jpeg|png|gif';

                    // Load and initialize upload library
                    $this->load->library('upload', $config);
                    $this->upload->initialize($config);

                    // Upload file to server
                    if($this->upload->do_upload('file')){
                        // Uploaded file data
                        $fileData = $this->upload->data();
                        $uploadData[$i]['file_name'] = $fileData['file_name'];
                        $uploadData[$i]['uploaded_on'] = date("Y-m-d H:i:s");
                    }
                }

                if(!empty($uploadData)){
                    // Insert files data into the database
                    $insert = $this->file->insert($uploadData);

                    // Upload status message
                    $statusMsg = $insert?'Files uploaded successfully.':'Some problem occurred, please try again.';
                    $this->session->set_flashdata('statusMsg',$statusMsg);
                }
            }

            // Get files data from the database
            $data['files'] = $this->file->getRows();

            // Pass the files data to view
            $this->load->view('upload_files/index', $data);
        }

If you want to upload multiple files from different inputs then you have to write file upload code multiple times not in foreach loop.

Example :
for file1 input:
if($this->input->post('fileSubmit') && !empty($_FILES['file1']['name'])){

                $_FILES['file']['name']     = $_FILES['files']['name'][$i];
                $_FILES['file']['type']     = $_FILES['files']['type'][$i];
                $_FILES['file']['tmp_name'] = $_FILES['files']['tmp_name'][$i];
                $_FILES['file']['error']     = $_FILES['files']['error'][$i];
                $_FILES['file']['size']     = $_FILES['files']['size'][$i];

                // File upload configuration
                $uploadPath = 'uploads/files/';
                $config['upload_path'] = $uploadPath;
                $config['allowed_types'] = 'jpg|jpeg|png|gif';

                // Load and initialize upload library
                $this->load->library('upload', $config);
                $this->upload->initialize($config);

                // Upload file to server
                if($this->upload->do_upload('file')){
                    // Uploaded file data
                    $fileData = $this->upload->data();
                    $uploadData[$i]['file_name'] = $fileData['file_name'];
                    $uploadData[$i]['uploaded_on'] = date("Y-m-d H:i:s");
                }
            }

Same code for file 2.

答案 1 :(得分:0)

尝试一下。这段代码是我正在使用的...

 private function upload_files($path, $title, $files)
{
    $config = array(
        'upload_path'   => $path,
        'allowed_types' => 'jpg|gif|png',
        'overwrite'     => 1,                       
    );

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

    $images = array();

    foreach ($files['name'] as $key => $image) {
        $_FILES['images[]']['name']= $files['name'][$key];
        $_FILES['images[]']['type']= $files['type'][$key];
        $_FILES['images[]']['tmp_name']= $files['tmp_name'][$key];
        $_FILES['images[]']['error']= $files['error'][$key];
        $_FILES['images[]']['size']= $files['size'][$key];

        $fileName = $title .'_'. $image;

        $images[] = $fileName;

        $config['file_name'] = $fileName;

        $this->upload->initialize($config);

        if ($this->upload->do_upload('images[]')) {
            $this->upload->data();
        } else {
            return false;
        }
    }

    return $images;
}