Codeigniter 上传文件为空

Codeigniter upload file is empty

我在上传文件时遇到问题。我正在使用 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) "" ["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) "" } }

我尝试转储 fileToUpload 输入的 POST 值,也是空的。有什么我忽略的吗?

当使用 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++;
}

这可能有效,您也可能希望避免像配置路径中那样的完整路径,这将很难在部署时更改并且您可能会遇到很多错误,相反您可以使用类似 <?php base_url('anyFolderInYourProject/anySubfolder'); ?> 它为您提供了项目目录的完整路径,并添加了您放入其中的任何路径。

希望这对您有所帮助,问候。

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

您还需要使用 do_upload() 上传功能才能真正处理。有关更多信息,请参阅 CI 文档。非常简单。

您可以在加载->库之前尝试使用它:

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