Codeigniter的'do_upload('file')'表示“文件没有被选中”而$ _FILE ['file']有它

时间:2017-08-28 15:57:13

标签: php jquery ajax codeigniter upload

我一直在搜索这个问题,每个帖子都有相同的答案:加载库,配置然后 - > do_upload('file')。似乎解决了每个人的问题,但我的。

我正在使用ajaxFormData发送我的文件(pdf),在我发布之后,可以使用$_FILE看到它但是无法通过->do_upload {1}}。

视图/ home.php

 <body>
    <?php echo form_open_multipart('formulario/questionario');?>
    ...

 <div class="col-md-6">
    <label class="btn btn-secondary" for="input-c-civis">
       <input id="input-c-civis" type="file" style="display:none;" accept=".pdf">Selecionar contrato
    </label>
 </div>

<div class="col-md-6">
    <label class="btn btn-secondary" for="input-c-art-civis">
      <input id="input-c-art-civis" type="file" style="display:none;" accept=".pdf"> Selecionar contrato
    </label>
 </div>

 <div class="container justify-content-center">
    <button id="botao-submit" class="btn btn-primary" type="button">Send</button>
 </div>

/assets/js/script.js

$(document).ready(function() {

    $("#botao-submit").click(function() {
        insertExtras();
    });
});

// This method gets the value from home.php elements.
function extraFormData() {
  var formData = new FormData();

  var contratoPDF = $("#input-c-civis").prop('files')[0];
  var artPDF = $("#input-c-art-civis").prop('files')[0];

  formData.append("contratoPDF", contratoPDF);
  formData.append("artPDF", artPDF);

  return formData;
}


function insertExtras() {
    $.ajax({
        cache: false,
        contentType: false,
        processData: false,
        type: 'POST',
                url: 'index.php/formulario/questionario',
                data:  extraFormData()
            }).done(function(msg) {
                console.log(msg);
            }).fail(function(error) {
                console.error(error.responseText);
            })
}

/controllers/formulario.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Formulario extends CI_Controller {

function __construct() {
    parent::__construct();
    $this->load->model('Extras_model', 'questionario');

    $this->load->helper(array(
        'form',
        'url'
    ));
}

public function index() {
    $this->load->view('home');
}

public function questionario() {

    $config['upload_path']   = './uploads/contratos/';
    $config['allowed_types'] = 'pdf';
    $config['max_size']      = 50000;

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

    if (!$this->upload->do_upload('contratoPDF')) {
        $error = $this->upload->display_errors();
        print_r($error);
    } else {
        $data = array(
            'upload_data' => $this->upload->data()
        );
        echo $data;
    }

    var_dump($_FILES['contratoPDF']);
    var_dump($_FILES['artPDF']);

    }
}
?>

所以在用ajax发送文件之后我得到: 来自:$this->upload->display_errors();You did not select a file to upload.

但是从var_dump($_FILES['contratoPDF']);var_dump($_FILES['artPDF']);显示了包含文件信息的两个数组。

对于代码墙和拼写错误,我很抱歉,我试图尽可能明确。

1 个答案:

答案 0 :(得分:0)

extraFormData()替换为:

function extraFormData() {
  var formData = new FormData();

  var contratoPDF = $("#input-c-civis")[0].files[0];
  var artPDF = $("#input-c-art-civis")[0].files[0];

  formData.append("contratoPDF", contratoPDF);
  formData.append("artPDF", artPDF);

  return formData;
}