Codeigniter上载文件为空



我上传文件时遇到问题。我正在使用codeigniter框架和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 _name"]=>string(0("["客户端名称"]=>字符串(0(["file_size"]=>NULL["is_image"]=>布尔(false(["image_width"]=>NULL["image_height"]=>ULL["image_type"]=>string(0("["image_size_str"]=>字符串(0("}}

我尝试转储fileToUpload输入的POST值,该值也是空的。有什么东西我在俯瞰吗?

当使用codeigniter上传库时,默认情况下需要一个名为userfile的Post变量和一个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'); ?>这样的东西,它为您提供项目目录的完整路径并添加您放入的任何路由。

希望这有帮助,问候。

您不必一次发送多个文件。事实上,这不是默认行为:http://www.dropzonejs.com/#config-uploadMultiple。Dropzone可以通过parallelUploads点击相同的上传url,通过不同的请求同时处理多个文件。这就是我所使用的,它大大降低了后端代码的复杂性,而不需要额外的成本。因此,从本质上讲,松开数组并将parallelUploads设置为您想要的任何值。

您还需要使用函数do_upload()进行上传以进行实际处理。有关此方面的详细信息,请参阅CI文档。这很简单。

您可以在加载前尝试使用此库:

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

相关内容

  • 没有找到相关文章

最新更新