На взгляд
<?php echo form_open_multipart('welcome/do_upload');?>
<input type="file" name="userfile" size="20" />
В контроллере
function do_upload()
{
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$config['overwrite'] = TRUE;
$config['encrypt_name'] = FALSE;
$config['remove_spaces'] = TRUE;
if ( ! is_dir($config['upload_path']) ) die("THE UPLOAD DIRECTORY DOES NOT EXIST");
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload('userfile')) {
echo 'error';
} else {
return array('upload_data' => $this->upload->data());
}
}
И я вызываю эту функцию следующим образом
$this->data['data'] = $this->do_upload();
и просматриваю это изображение:
<ul>
<?php foreach ($data['upload_data'] as $item => $value):?>
<li><?php echo $item;?>: <?php echo $value;?></li>
<?php endforeach; ?>
</ul>
Я не знаю, в чем ошибка.
Похоже, проблема в том, что вы отправляете запрос формы в welcome/do_upload
, а вызываете метод Welcome::do_upload()
в другом методе $this->do_upload()
.
Следовательно, когда вы вызовете $this->do_upload();
внутри вашего второго метода, массив $_FILES
будет пустым.
И поэтому var_dump($data['upload_data']);
возвращает NULL
.
Если вы хотите загрузить файл из welcome/second_method
, отправьте запрос формы в welcome/second_method, где вызовите $this->do_upload();
.
Затем измените вспомогательную функцию формы (внутри View) следующим образом1:
// Change the 'second_method' to your method name
echo form_open_multipart('welcome/second_method');
CodeIgniter очень хорошо документировал процесс загрузки файлов, используя библиотеку File Uploading.
Вы можете взглянуть на пример кода в руководстве пользователя; а также, чтобы лучше понять конфиги загрузки, проверьте раздел Пояснение элементов конфигурации в конце страницы руководства.
Также есть несколько статей/примеров о загрузке файлов в CodeIgniter, которые вы можете рассмотреть:
В качестве сторонней заметки: Убедитесь, что вы загрузили вспомогательные функции url
и form
перед использованием кода примера CodeIgniter:
// Load the helper files within the Controller
$this->load->helper('form');
$this->load->helper('url');
form_open_multipart()
, которая возвращает:
<form method="post" action="controller/method" enctype="multipart/form-data" />
.
Простая загрузка изображений в codeigniter
Ниже приведен код для простой загрузки изображений
<?php echo form_open_multipart('welcome/do_upload');?>
<input type="file" name="userfile" size="20" />public function doupload()
{
$upload_path="https://localhost/project/profile"
$uid='10'; //creare seperate folder for each user
$upPath=upload_path."/".$uid;
if(!file_exists($upPath))
{
mkdir($upPath, 0777, true);
}
$config = array(
'upload_path' => $upPath,
'allowed_types' => "gif|jpg|png|jpeg",
'overwrite' => TRUE,
'max_size' => "2048000",
'max_height' => "768",
'max_width' => "1024"
);
$this->load->library('upload', $config);
if(!$this->upload->do_upload('userpic'))
{
$data['imageError'] = $this->upload->display_errors();
}
else
{
$imageDetailArray = $this->upload->data();
$image = $imageDetailArray['file_name'];
}
}
Надеюсь, это поможет вам загрузить изображение
Измените код следующим образом. Он работает идеально:
public function uploadImageFile() //gallery insert
{
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$new_image_name = time() . str_replace(str_split(' ()\\/,:*?"<>|'), '',
$_FILES['image_file']['name']);
$config['upload_path'] = 'uploads/gallery/';
$config['allowed_types'] = 'gif|jpg|png|bmp|jpeg';
$config['file_name'] = $new_image_name;
$config['max_size'] = '0';
$config['max_width'] = '0';
$config['max_height'] = '0';
$config['$min_width'] = '0';
$config['min_height'] = '0';
$this->load->library('upload', $config);
$upload = $this->upload->do_upload('image_file');
$title=$this->input->post('title');
$value=array('title'=>$title,'image_name'=>
$new_image_name,'crop_name'=>$crop_image_name);}