多个文件上载控件在CI中不起作用

时间:2018-05-19 07:43:43

标签: php codeigniter file-upload codeigniter-2 codeigniter-3

在CodeIgniter中,我有4个文件上传控件,如下所示:

<?php echo form_open_multipart('uploadimg');?>
<input type="file" name="image1" />
<input type="file" name="image2" />
<input type="file" name="image3" />
<input type="file" name="image4" />
<input type="submit" value="upload" />
<?php echo form_close();?>

以下是我的文件上传代码:

$name1="img1.jpg";
$config1=array(
    'upload_path'=>$_SERVER['DOCUMENT_ROOT']."/c/uploads/",
    'allowed_types'=>"gif|jpg|png|jpeg|pdf|JPG|JPEG",
    'overwrite'=>TRUE,
    'max_size'=>"500",
    'file_name'=>$name1,
    );
$this->load->library('upload',$config1);
if($this->upload->do_upload('image1'))
{
    echo "Image 1 has been uploaded successfully";
}
else
{
    echo $this->upload->display_errors();
}
$name2="img2.jpg";
$config2=array(
    'upload_path'=>$_SERVER['DOCUMENT_ROOT']."/c/uploads/",
    'allowed_types'=>"gif|jpg|png|jpeg|pdf|JPG|JPEG",
    'overwrite'=>TRUE,
    'max_size'=>"500",
    'file_name'=>$name2,
    );
$this->load->library('upload',$config2);
if($this->upload->do_upload('image2'))
{
    echo "Image 2 has been uploaded successfully";
}
else
{
    echo $this->upload->display_errors();
}
$name3="img3.jpg";
$config3=array(
    'upload_path'=>$_SERVER['DOCUMENT_ROOT']."/c/uploads/",
    'allowed_types'=>"gif|jpg|png|jpeg|pdf|JPG|JPEG",
    'overwrite'=>TRUE,
    'max_size'=>"500",
    'file_name'=>$name3,
    );
$this->load->library('upload',$config3);
if($this->upload->do_upload('image3'))
{
    echo "Image 3 has been uploaded successfully";
}
else
{
    echo $this->upload->display_errors();
}
$name4="img4.jpg";
$config4=array(
    'upload_path'=>$_SERVER['DOCUMENT_ROOT']."/c/uploads/",
    'allowed_types'=>"gif|jpg|png|jpeg|pdf|JPG|JPEG",
    'overwrite'=>TRUE,
    'max_size'=>"500",
    'file_name'=>$name4,
    );
$this->load->library('upload',$config4);
if($this->upload->do_upload('image4'))
{
    echo "Image 4 has been uploaded successfully";
}
else
{
  echo $this->upload->display_errors();
}

我得到以下输出:

  

图片1已成功上传图片2已上传   successImage 3已成功上传图片4已经   已成功上传

但是,在uploads文件夹中,我只获得了1个文件。奇怪的是,正在显示的文件是最后一个文件上传控件,但文件名是img1。,即首次上传文件的名称。

为什么会这样?解决方案是什么?

3 个答案:

答案 0 :(得分:2)

使用initialize()方法设置每个配置,而不是在加载上传库时设置。

<强>更改:

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

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

更新代码:

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

$name1   = "img1.jpg";
$config1 = array(
    'upload_path' => FCPATH . "uploads/",
    'allowed_types' => "gif|jpg|png|jpeg|pdf|JPG|JPEG",
    'overwrite' => TRUE,
    'max_size' => "500",
    'file_name' => $name1
);

$this->upload->initialize($config1);
if ($this->upload->do_upload('image1')) {
    echo "Image 1 has been uploaded successfully";
} else {
    echo $this->upload->display_errors();
}
$name2   = "img2.jpg";
$config2 = array(
    'upload_path' => FCPATH . "uploads/",
    'allowed_types' => "gif|jpg|png|jpeg|pdf|JPG|JPEG",
    'overwrite' => TRUE,
    'max_size' => "500",
    'file_name' => $name2
);
$this->upload->initialize($config2);

if ($this->upload->do_upload('image2')) {
    echo "Image 2 has been uploaded successfully";
} else {
    echo $this->upload->display_errors();
}
$name3   = "img3.jpg";
$config3 = array(
    'upload_path' => FCPATH . "uploads/",
    'allowed_types' => "gif|jpg|png|jpeg|pdf|JPG|JPEG",
    'overwrite' => TRUE,
    'max_size' => "500",
    'file_name' => $name3
);
$this->upload->initialize($config3);

if ($this->upload->do_upload('image3')) {
    echo "Image 3 has been uploaded successfully";
} else {
    echo $this->upload->display_errors();
}
$name4   = "img4.jpg";
$config4 = array(
    'upload_path' => FCPATH . "uploads/",
    'allowed_types' => "gif|jpg|png|jpeg|pdf|JPG|JPEG",
    'overwrite' => TRUE,
    'max_size' => "500",
    'file_name' => $name4
);
$this->upload->initialize($config4);
if ($this->upload->do_upload('image4')) {
    echo "Image 4 has been uploaded successfully";
} else {
    echo $this->upload->display_errors();
}

答案 1 :(得分:0)

这对我的网站很有用,我希望它可以帮助你提高你的代码。

<强> HTML

<form class="col s12" id='propertyform' enctype="multipart/form-data">
 <input type="file" name="image1" />
 <input type="file" name="image2" />
 <input type="file" name="image3" />
 <input type="file" name="image4" />
<a class="waves-effect waves-light btn addproperty">add</a>
</form>

<强> JS

$(".addproperty").on("click",function()
{
    var baseurl = $("#base_url").val();
    var property = new FormData($("#propertyform")[0]);
    $.ajax({
          url : baseurl+"dropdowns/add_propertyy",
          data : property,
          type:"POST",
          contentType:false,
          processData:false,
          success:function(res)
          {
            window.location.reload();
          }
    }); 
});

<强>控制器

public function add_propertyy()
{
  $id = 1; 
  $images = $id."_image1.".pathinfo($_FILES['image1']['name'], PATHINFO_EXTENSION);
  $images1 = $id."_image2.".pathinfo($_FILES['image2']['name'], PATHINFO_EXTENSION);
  $images2 = $id."_image3.".pathinfo($_FILES['images3']['name'], PATHINFO_EXTENSION);
  $images3 = $id."_image4.".pathinfo($_FILES['image4']['name'], PATHINFO_EXTENSION);

  $addimg = array(
    "images1" =>  $images,
    "images2" =>  $images1,
    "images3" =>  $images2,
    "images4" =>  $images3,     
   );

  $this->load->model('property_model');
  $this->property_model->add_pro_img($addimg,$id);


    $uploadPath = "./html/images/property";

    $config['upload_path'] = $uploadPath;
    $config['allowed_types'] = 'gif|jpg|png|pdf';
    $config['overwrite'] = TRUE;
    $config['encrypt_name'] = FALSE;
    $config['remove_spaces'] = TRUE;

    $config['file_name'] = $id."_images1";
    $this->load->library('upload', $config);
    $this->upload->do_upload('images');
    $this->upload->display_errors();

    $config['file_name'] = $id."_images2";
    $this->upload->initialize($config);
    $this->upload->do_upload('images2');
    $this->upload->display_errors();       

    $config['file_name'] = $id."_images3";
    $this->upload->initialize($config);
    $this->upload->do_upload('images3');
    $this->upload->display_errors();

    $config['file_name'] = $id."_images4";
    $this->upload->initialize($config);
    $this->upload->do_upload('images4');
    $this->upload->display_errors();

 }

<强>模态

public function add_pro($data) {
    $this->db->insert("property",$data);
    $id = $this->db->insert_id();
    return $id;
}

答案 2 :(得分:0)

  

你可以试试这个。这样可以正常上传两个文件   (音频,图片)或更多文件到数据库。

     

表名:产品

>>> s = "I have a cat"
>>> s.find("have")
2

<强> HTML

| id | product_name | price | description| product_image | audio_file |

<强>控制器

<form name="addProduct" id="addProduct" method="POST" enctype="multipart/form-data">
    <input type="text" name="product_name" placeholder="Product Name">
    <input type="text" name="price" placeholder="Product Price">
    <textarea id="description" name="description" class="materialize-textarea" placeholder="Description"></textarea>
    <input type="file" name="product_image" id="fileImg">
    <input type="file" name="audio_file" id="audio_file">
    <input type="button" name="addProduct" value="Add Product" class="btn btn-flat btn-add-product">
</form>

}

<强>模型

public function addProducts(){
/*Initialization of model*/
$this->load->model("product_model");

/*store data into array*/
$result=array(
        "product_name"=>$_POST["product_name"],
        "price"=>$_POST["price"],
        "description"=>$_POST["description"],
        );

$proID = $this->product_model->addProduct($result); //sending data to model for insertion

//Define the file names with blog id with same extension which has been uploaded
$product_image = $proID."_product.".pathinfo($_FILES['product_image']['name'], PATHINFO_EXTENSION);     
$product_audio = $proID."_audio.".pathinfo($_FILES['audio_file']['name'], PATHINFO_EXTENSION);      

$updateData = array(
    "product_image" => $product_image,
    "audio_file"=>$product_audio            
);

// update the name of the images in the database
$this->product_model->updateProduct($updateData,$proID);

//set configuration for the upload library

/* |===> Image Config  <==|*/
$config['upload_path'] = 'html/images/products/';
$config['allowed_types'] = 'gif|jpg|png|jpeg';
$config['overwrite'] = TRUE;
$config['encrypt_name'] = FALSE;
$config['remove_spaces'] = TRUE;

/* |==> Audio Config <==|*/
$config_audio['upload_path'] = 'html/images/products/audios/';
$config_audio['allowed_types'] = 'mp3|mp4';
$config_audio['overwrite'] = TRUE;
$config_audio['encrypt_name'] = FALSE;
$config_audio['remove_spaces'] = TRUE;

//set name in the config file for the feature image
$config['file_name'] = $proID."_product";

$this->load->library('upload', $config);  // config first file 
$this->upload->do_upload('product_image');
$this->upload->display_errors();

$config_audio['file_name'] = $proID."_audio";
$this->upload->initialize($config_audio); // config seconf file

$this->upload->do_upload('audio_file');
$this->upload->display_errors();