CodeIgniter 中的 Ajax 上传返回“您没有选择要上传的文件”
Posted
技术标签:
【中文标题】CodeIgniter 中的 Ajax 上传返回“您没有选择要上传的文件”【英文标题】:Ajax upload in CodeIgniter returns "you did not select a file to upload" 【发布时间】:2015-12-17 04:19:42 【问题描述】:我尝试在 CodeIgniter 中通过 Ajax 上传图片,但总是收到错误消息“您没有选择要上传的文件”。
这里是 jQuery 代码:
$(document).ready(function (e)
$('#submitUpload').bind('click', function(evt)
var $btn = $(this).button('loading');
var formData = new FormData();
var inputImage = $('#inputImage')[0];
console.log(inputImage.files[0]);
formData.append('file', inputImage.files[0]);
$.ajax(
url: baseUrl + 'trainings/uploadImageAsync',
type: 'post',
dataType: 'json',
data: formData,
contentType: false,
cache: false,
processData: false,
success: function(data)
console.log(data);
$btn.button('reset');
);
);
);
这是表格部分:
<div class="modal-body" id="bodyTrainingForm">
<form class="form-horizontal" id="formTrainingForm" enctype="multipart/form-data">
<div class="form-group">
<label for="inputTitle" class="col-sm-2 control-label">Title</label>
<div class="col-sm-9">
<input type="text" class="form-control" id="inputTitle" name="title" placeholder="Title">
</div>
</div>
<div class="form-group">
<label for="inputImg" class="col-sm-2 control-label">Image</label>
<div class="col-sm-9">
<img class="img-thumbnail" src="holder.js/140x140">
<input class="form-control" type="file" name="file" id="inputImage" required>
<button data-loading-text="Loading..." type="button" class="btn btn-default" id="submitUpload">Upload</button>
</div>
</div>
</form>
</div>
还有似乎可以工作的 php 部分:
public function uploadImageAsync()
$config['upload_path'] = base_url() . 'asset/img/thumbnails/';
$config['allowed_types'] = 'jpg|png';
$config['max_size'] = 1024 * 8;
$config['max_width'] = 140;
$config['max_height'] = 140;
$this->load->library('upload', $config);
if (!$this->upload->do_upload())
echo json_encode(array(
'error' => $this->upload->display_errors(),
));
return;
echo json_encode(array(
'success' => $this->upload->data(),
));
console.log(inputImage.files[0]);完美返回我想附加到 FormData 的文件,这似乎不起作用。我在这里错过了什么?
【问题讨论】:
【参考方案1】:我明白了。我认为您应该先尝试更改文件夹的权限。我希望这可以帮助 Chmod 777 to a folder and all contents
【讨论】:
您好,感谢您的努力。事实证明,权限一直都是正确设置的。我只是未能正确指向上传目录。我不应该添加base_url()
...正确的声明是$config['upload_path'] = './assets/img/thumbnails/';
【参考方案2】:
尝试在你的上传文件中包含一个文件->do_upload()
if(!$this->upload->do_upload('file') /* error */
【讨论】:
感谢您的回答,但我想我找到了问题所在,只是不知道如何解决。上传路径似乎不可写,因为die(debug(is_writable($config['upload_path'])));
返回false
。我只是不知道正确设置权限。我在 Win10 上用 xampp...【参考方案3】:
我自己想通了!我的错误是将base_url()
添加到$config['upload_path']
。应该这样做:
$config['upload_path'] = './assets/img/thumbnails/';
【讨论】:
以上是关于CodeIgniter 中的 Ajax 上传返回“您没有选择要上传的文件”的主要内容,如果未能解决你的问题,请参考以下文章
Codeigniter 图片上传使用 jquery 和 ajax 错误 [重复]
CodeIgniter AJAX文件上传,上传时$_FILE为空