Файл загрузки Codeigniter пуст

У меня проблема с загрузкой файлов. Я использую codeigniter Framework и dropzone.js для загрузки файлов.

по-моему:

<!-- START MODAL ADD FILE -->
<!-- Modal -->
<div class="modal fade" id="myModalFile" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="myModalLabel">Nahrát Soubory</h4>
</div>
<div class="modal-body">
<form action="<?php echo base_url("items/upload_agreement"); ?>" class="dropzone" method="POST" enctype="multipart/form-data">
<input type="hidden" name="agreement_dir_name" value="<?= $agreementDir;?>"  >
<input type="hidden" name="dir_name" value="<?= $customer_dir;?>"  >
<input type="hidden" name="customer_id" value="<?= $customerID;?>"  >
<input type="hidden" name="agreement_id" value="<?= $agreementID;?>"  >
<div class="fallback">
<input name="fileToUpload[]" type="file" id="fileToUpload" multiple />
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger btn-default" data-dismiss="modal">Zavřít</button>
<input type="submit" class="btn btn-success btn-default" value="Nahrát" >
</form>
</div>

</div>
</div>
</div>
<!-- END MODAL ADD FILE -->

контроллер:

public function upload_agreement()
{
$customerDir = $this->input->post('dir_name');
$agreementDir = $this->input->post('agreement_dir_name');

$config['upload_path']          = "/www/Cesarlease2/leases/$customerDir/$agreementDir/";


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

$data = array('upload_data' => $this->upload->data());
$this->session->set_flashdata('success_msg', 'Soubor úspěšně nahrán');
redirect("items/items/".$this->input->post('customer_id')."/".$this->input->post('agreement_id'));

}

Проблема в том, что загруженный файл возвращается как пустой:

array (1) {[«upload_data»] => array (14) {[«file_name»] => string (0) «» [«file_type»] => string (0) «» [«file_path»] => string (56) «/ www / Cesarlease2 / leases / testircrswqe789745asda / 2-42017a /» [«full_path»] => string (56) «/ www / Cesarlease2 / leases / testircrswqe789745asda / 2-42017a /» [«raw_name»] => bool (false) [«orig_name»] => string (0) «» [«client_name»] => string (0) «» [«file_ext»] => string (0) «» [«file_size»] => NULL [«is_image»] => bool (false) [«image_width»] => NULL [«image_height»] => NULL [«image_type»] => string (0) «» [«image_size_str»] => string (0) «»}}

Я попытался сбросить значение POST ввода fileToUpload, также пустой. Есть что-то, что я пропускаю?

0

Решение

При использовании библиотеки загрузки codeigniter по умолчанию ожидается переменная Post с именем userfile и форма miltipart.

Вы можете открыть форму miltipart с этим кодом

<?php echo form_open_multipart('controller/method');?>

Это может заменить ваш <form> тег, и вы можете закрыть его с помощью этого кода

<?php echo form_close(); ?>

Или вы можете продолжать использовать свой </form> тег

В вашем контроллере, поскольку вы используете другое имя почтовой переменной и массив, вы должны закодировать цикл примерно так:

$i=0
foreach ($this->input-post('fileToUpload') as $p ){
$data[$i] = array('upload_data' =>$this->upload->data($p));
$i++;
}

Это может сработать, также вы можете избежать полных путей, таких как путь в вашем конфиге, который будет очень трудно изменить при развертывании, и вы можете иметь много ошибок, вместо этого вы можете использовать что-то вроде <?php base_url('anyFolderInYourProject/anySubfolder'); ?> который дает вам полный путь к каталогу вашего проекта и добавляет любой путь, который вы положили внутрь.

Надеюсь, что это помогает, привет.

1

Другие решения

Вам не нужно отправлять несколько файлов одновременно. На самом деле это не стандартное поведение: http://www.dropzonejs.com/#config-uploadMultiple. Dropzone может обрабатывать несколько файлов одновременно по разным запросам, нажимая одну и ту же ссылку для загрузки через parallelUploads, Это то, что я использую, и это значительно снижает сложность вашего внутреннего кода без каких-либо дополнительных затрат. Так что по сути, потерять массив и установить parallelUploads к тому, что вы хотите.

Вам также нужно использовать функцию do_upload() для загрузки на самом деле обрабатывать. Смотрите документацию по CI для более подробной информации. Это довольно просто.

0

Вы можете попробовать использовать это перед загрузкой-> библиотека:

$this->upload->initialize($config);
0
По вопросам рекламы [email protected]