使用相同的输入在 codeigniter 中上传多个图像

问题描述 投票:0回答:2
php codeigniter
2个回答
1
投票

为了避免偏移错误,在 for 循环内部,您需要检查该数组索引是否已设置: 这里我有一个在CodeIgniter中上传多个文件的演示代码:

视图/stack_view.php

<?php if ($this->session->flashdata('status')) { ?>

    <h5><?=$this->session->flashdata('status')?>: <?=$this->session->flashdata('message')?></h5>

<?php } ?>

<?=form_open_multipart('stack', array('id' => 'my_id'))?>

  <input type="file" name="userfile[]" size="40" multiple/>
  <input type="submit" name="submit" value="Upload">

<?=form_close()?>

控制器/Stack.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Stack extends CI_Controller {

    public function __construct()
    {
            parent::__construct();

            $this->load->library('session');
            $this->load->helper(array('form', 'url'));
    }

    public function index()
    {
        if ($this->input->post('submit')) {

            $config['upload_path']          = './uploads/';
            $config['allowed_types']        = 'gif|jpg|png|jpeg';

            $files = $_FILES;

            if ($files['userfile']['name'][0] == '' ) {
                # code...
                $this->session->set_flashdata('status', 'error');
                $this->session->set_flashdata('message', "Select a file to upload");
            }
            else
            {
                $mum_files = count($files['userfile']);
                $dataInfo = array();
                for($i=0; $i<$mum_files; $i++)
                {

                    if ( isset($files['userfile']['name'][$i]) ) {

                        $config['file_name'] = time().'-'.$files['userfile']['name'][$i];
                        $this->load->library('upload', $config);

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

                        $filename = rand().'-'.$_FILES['userfile']['name'];

                        if ( ! $this->upload->do_upload('userfile'))
                        {
                            $error_message = $this->upload->display_errors();

                            $this->session->set_flashdata('status', 'error');
                            $this->session->set_flashdata('message', "$error_message");
                        }
                        else
                        {
                            //$data = array('upload_data' => $this->upload->data());

                            $this->session->set_flashdata('status', 'success');
                            $this->session->set_flashdata('message', "Files upload is success");
                        }

                        $dataInfo[] = $this->upload->data(); //all the info about the uploaded files are stored in this array

                    }
                }

                //here you can insert all the info about uploaded file into database using $dataInfo
                $all_imgs = '';

                if ( count($dataInfo) > 0) {
                    # code...
                    foreach ($dataInfo as $info) {
                        # code...
                        $all_imgs .= $info['file_name'];
                        $all_imgs .= ',';
                    }
                }

                $insert_data = array(
                   'your_column_name' => rtrim($all_imgs,",")
                );

                $this->db->insert('your_table_name', $insert_data);
            }

        }

        $this->load->view('stack_view');

    }
}

尝试这个脚本,我希望你能从中得到一些帮助。


0
投票

这是工作脚本尝试上传它 公共函数上传() {

    $this->load->library('session');

    if ( ! empty($_FILES))
    {


        $config['upload_path'] = "assets/uploads/";
        $config['allowed_types'] = 'jpg|png|jpeg';
        $config['max_size'] = 5120; //limit only 5 Mb

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

        $files           = $_FILES;;
        $number_of_files = count($_FILES['files']['name']);

        $errors = 0;
        $myname = $this->input->post('ad_title');

        for ($i = 0; $i < $number_of_files; $i++)
        {

            //$randVal = rand(450,4550).time('d-y-m');
            $filename  = basename($files['files']['name'][$i]);
            $extension = pathinfo($filename, PATHINFO_EXTENSION);
            $new       = md5($filename.''.time('d-y-m')).'.'.$extension;

            $_FILES['files']['name'] = $new; //$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];


            $image = array('upload_data' => $this->upload->data()); 

            $image_name = $_FILES['files']['name'];

            $ip = $this->input->ip_address();

            $this->session->set_userdata("userIP",$ip);
            //$this->session->unset_userdata("userIP");
            $Dval = array(
            "filename" => $image_name,
            "ip"    => $this->input->ip_address()
            );




            $this->member_model->tmp_image($Dval);

            $this->upload->initialize($config);
            if ( $this->upload->do_upload("files")) 
            {

                $errors++;
                $data = $this->upload->data();
                echo json_encode($data['file_name']);

                //code is for thumbnail and watermark on images
                //$this->watermark($data['full_path']);
                //$myPathfT =  $config1['upload_path'] = "./assets/thumbs/".$aDir;
                //mkdir($myPathfT);b  


                $config1 = array();
                $config1['image_library']   =       'gd2'; 
                $config1['source_image']    =        $data['full_path'];
                $config1['new_image']       =       'assets/uploads/thumbs/';
                $config1['create_thumb']    =       false;
                $config1['quality']         =       50;
                $config1['height']          =       150;
                $config1['width']           =       150;

                $this->load->library('image_lib',$config1);
                $this->image_lib->initialize($config1);
                $this->image_lib->resize();
                $this->image_lib->clear();
                }
            }

        if ($errors > 0) 
            {
                //echo  "Data Transferred";
            }

    }
            elseif ($this->input->post('file_to_remove')) 
            {
                 $aDir = $this->session->userdata('Dir');
                 $file_to_remove = $this->input->post('file_to_remove');

                 unlink("./assets/mainFilesData/$aDir/" . $file_to_remove);

                 $array = $this->session->userdata('photo');

                 $dataF = array_diff($array, array($file_to_remove));


                 $this->session->set_userdata('photo',$dataF);
            }
            else 
            {
                 $this->listFiles();
            }

}
© www.soinside.com 2019 - 2024. All rights reserved.