我试图让用户使用CodeIgniter的内置文件上传类上传文件。
这是上传表单:
upload_form.php
<?php if($error) : ?>
<div class="alert alert-danger">
<p><?php echo $error;?></p>
</div>
<?php endif ;?>
<form class="form-horizontal" role="form" action="<?=base_url().'upload/do_upload'?>" enctype = "multipart/form-data" >
<div class="form-group">
<label for="userfile" class="col-sm-1 control-label">Picture</label>
<div class="col-sm-1">
<input type="file" id="userfile" name ="userfile">
</div>
</div>
<button type="submit" class="col-sm-offset-1 btn btn-default">Submit</button>
</form>
如您所见,用户选择一个文件,然后提交。
这是表单的操作文件:
upload.php的
//Checks Image Before Upload, Throws Errors Or Uploads, Resizes And Shows Upload Success Page
function do_upload()
{
//Config Parameters For Allowed Uploads
$config['upload_path']= base_url().'uploads';
$config['allowed_types']='gif|jpeg|png|jpg|bmp';
$config['max_size']='5000';
$config['max_width']='10000';
$config['max_height']='10000';
$config['remove_spaces'] = TRUE;
$config['encrypt_name'] = TRUE;
//Load The Upload Library With Said Configuration
$this->load->library('upload',$config);
//If The Image Didn't Meet The Required Parameters
if(!$this->upload->do_upload())
{
//Throw An Error, Then Load The Uplaod Form Again With The Error Deatils
$error = array('error'=>$this->upload->display_errors());
$this->load->view('header');
$this->load->view('upload_form',$error);
$this->load->view('footer');
echo "here";
die();
}
//If The Image Met The Required Parameters
else
{
Upload Image
}
}
请注意:
action
指向正确的位置。enctype
已正确设置为multipart/form-data
/ 鉴于所有这些,do_upload
函数仍然无法执行(意味着 - (!$this->upload->do_upload())
为真)和记录到错误数组的错误(通过codeigniter&#39; s {{1} } function)您没有选择要上传的文件。
将问题划分为可消化的块:
答案 0 :(得分:0)
可能是mimes类型的问题。 请检查mimes配置文件mimes.php中可用的mime类型
如果没有,则按照代码
获取mime类型echo $this->upload->file_type ; // will give mime type of file.
在
之后使用它$this->upload->do_upload();
您将获得mime类型。将该mime类型添加到位于
的文件mimes.php中/应用/配置
例如如果文件有扩展名pptx,mime类型是application / powerpoint 然后将pptx的$ mimes数组更新为
'pptx' => array('application/powerpoint')
编辑:
完成以下更改,对我有用。
1)在视图中我添加了method="post"
<form class="form-horizontal" role="form" method="post" action="<?=base_url().'welcome/do_upload'?>" enctype = "multipart/form-data" >
2)并在控制器上传路径中声明为
$config['upload_path']= './uploads/';
此上传目录与应用程序目录位于同一文件夹中。
答案 1 :(得分:0)
最终得到了解决方案 - 与<form>
标签设置有关。
这是正确的:
<form action="upload_destination_url" method="post" accept-charset="utf-8" enctype="multipart/form-data" class="form-horizontal">