我正在尝试让用户使用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
/ - 我严格遵守CI文档中的要求。
考虑到所有这些,do_upload
函数仍然无法执行(意思是- (!$this->upload->do_upload())
为真),并且记录到错误数组的错误(通过codeigniter的display_errors()
函数)是您没有选择要上传的文件
把问题分成可消化的小块:
- 为什么函数开始失败?
- 当我清楚地尝试上传文件时,为什么会显示此错误?
- 这一切的错误是什么-一个粗糙的书写形式,或滥用CI的文件上传类?
最终得到了解决方案-与<form>
标记设置有关。
这是正确的:
<form action="upload_destination_url" method="post" accept-charset="utf-8" enctype="multipart/form-data" class="form-horizontal">
可能是哑剧类型的问题。请检查mime配置文件mime .php
中的mime类型是否可用。如果没有,则通过以下代码
获取mime类型echo $this->upload->file_type ; // will give mime type of file.
用在
之后$this->upload->do_upload();
您将获得mime类型。将mime类型添加到位于
的mime .php文件中/应用程序/配置
例如,如果文件扩展名为pptx, mime类型为application/powerpoint然后将PPTX的$mime数组更新为
'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" >
$config['upload_path']= './uploads/';
上传目录与应用程序目录在同一文件夹