您好我正在尝试使用下面的codigniter do_upload函数: 但是得到这个错误:“你没有选择要上传的文件。”我选择了一个文件,当我传递名字时,我可以看到名字,但仍然无法上传...在此先感谢寻求帮助。
function do_upload()
{
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload())
{
$data = array('error' => $this->upload->display_errors());
print_r($data);
exit;
//$this->load->view('clients_page', $error);
}
else
{
$data = array('upload_data' => $this->upload->data());
print_r($data);
exit;
}
}
答案 0 :(得分:3)
我认为您没有为<input type="file" />
默认userfile
命名。很高兴看到你的上传视图。
更改此
$this->upload->do_upload()
到这个
$this->upload->do_upload('audioRef')
答案 1 :(得分:2)
我选择了一个文件,当我传递名字时,我可以看到名字,但仍然无法上传
这通常是因为您省略了将表单设置为multipart/form-data
提交。表单默认为application/x-www-form-urlencoded
,不能包含文件上传;在这种情况下,您只需获取文件名。
<form method="post" action="..." enctype="multipart/form-data">
顺便提及,
$config['allowed_types'] = 'gif|jpg|png';
如果你必须使用文件扩展名来检查文件类型(并且这是不可取的,但不幸的是,这是CodeIgniter提供的),请同时允许jpeg
和任何其他可能的扩展。
$config['upload_path'] = './uploads/';
如果上传文件夹位于webroot中(您将直接从其中提供文件),那么这可能是一个跨站点脚本漏洞。不幸的是,可以上传看起来像图像但实际上包含HTML的文件,包括<script>
。
以安全的方式执行用户上传的内容难以。有关背景,请参阅例如this question。