我一直在搜索这个问题,每个帖子都有相同的答案:加载库,配置然后 - > do_upload('file')。似乎解决了每个人的问题,但我的。
我正在使用ajax
与FormData
发送我的文件(pdf),在我发布之后,可以使用$_FILE
看到它但是无法通过->do_upload
{1}}。
<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>
$(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);
})
}
<?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']);
显示了包含文件信息的两个数组。
对于代码墙和拼写错误,我很抱歉,我试图尽可能明确。
答案 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;
}