我上传文件时遇到问题。我正在使用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">×</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”] =>字符串(0)“” [“ file_type”] =>字符串(0)“” [“ file_path” ] =>字符串(56)“ / www / Cesarlease2 / leases / testircrswqe789745asda / 2-42017a /” [“ full_path”] =>字符串(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“] =>字符串(0)”“ [” image_size_str“ ] =>字符串(0)“”}}
我尝试转储fileToUpload输入的POST值,该值也为空。我有什么可以忽略的吗?
答案 0 :(得分:1)
在使用codeigniter上载库时,默认情况下,它需要一个名为userfile
的Post变量和一个miltipart格式。
您可以使用此代码打开一个miltipart表单
<?php echo form_open_multipart('controller/method');?>
这可以代替您的<form>
标签,您可以使用此代码将其关闭
<?php echo form_close(); ?>
或者您可以继续使用</form>
标签
在您的控制器中,由于您使用的是不同的post变量名称和数组,因此您应该编写类似于
的循环$i=0
foreach ($this->input-post('fileToUpload') as $p ){
$data[$i] = array('upload_data' =>$this->upload->data($p));
$i++;
}
这可能有效,您也可能希望避免使用完整路径,例如配置路径中的完整路径,这在部署时将很难更改,并且会出现很多错误,而可以使用类似{{1 }},它为您提供了项目目录的完整路径,并添加了放入其中的所有路径。
希望这会有所帮助。
答案 1 :(得分:0)
您不必一次发送多个文件。实际上,这不是默认行为:http://www.dropzonejs.com/#config-uploadMultiple。 Dropzone可以通过parallelUploads
来访问相同的上传网址,从而通过不同的请求同时处理多个文件。这就是我使用的方法,它极大地降低了后端代码的复杂性,而无需支付额外费用。因此,从本质上讲,松开数组并将parallelUploads
设置为所需的任何内容。
您还需要使用功能do_upload()
来实际处理上传。有关更多信息,请参阅CI文档。这非常简单。
答案 2 :(得分:0)
您可以在load-> library之前尝试使用它:
"0.33333333333333333333333"