Несколько элементов управления загрузкой файлов не работают в CI - PullRequest
0 голосов
/ 19 мая 2018

В 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 успешно загружено. Изображение 3 успешно загружено. Изображение 4 успешно загружено.


Но в папке загрузок яЯ получаю только 1 файл.Странно то, что отображаемый файл имеет последний элемент управления загрузкой, но имя файла - img1., То есть имя первого загруженного файла.

Почему это происходит?Какое решение?

Ответы [ 3 ]

0 голосов
/ 19 мая 2018

Это хорошо работает на моем сайте, и я надеюсь, что это поможет вам повысить ваш код.

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;
}
0 голосов
/ 19 мая 2018

Вы можете попробовать это.Это работает правильно, чтобы загрузить два файла (аудио, изображение) или более файлов в базу данных.

Имя таблицы: продукты

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

HTML

<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();

} ​​

Модель

/*Add Product*/
public function addProduct($pro_data){
    $query=$this->db->insert("products",$pro_data);       
    $id=$this->db->insert_id();
    return $id;
}

/*Update for Multiple File Upload*/
public function updateProduct($result,$up_id){
    $this->db->where('id',$up_id);
    $this->db->update("products",$result);
}
0 голосов
/ 19 мая 2018

Установите каждую конфигурацию, используя метод 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...