Thinkphp上传文件失败原因--Public目录限制
Thinkphp框架的文件目录是自动生成的,并且为了防止影响,一般是固定的。同时,在一些文件的访问权限方面做了一些设置,例如Public文件夹是所有都可以访问的,而其他不一定可以直接访问。
例如:
$upload->savePath = 'root/address/uploadFiles/';
这一句话会导致提示文件上传成功,也可以成功插入数据库中,但是在这个目录下,文件并没有被复制进去。发生这个问题的原因是,没有对这个目录的写入权限,因为它不是Public,所以被限制了。
可以改为类似的目录:
$upload->savePath = './Public/myfiles/';
则问题可以解决。
下面是一个例子程序,大家可以去改改尝试一下。当然,也许还有其他的原因导致的,如果高手们知道,请赐教。。。
public function upload_act(){
if(!empty($_FILES)) {
//如果有文件上传 上传附件
$this->_upload();
//$this->forward();
}
}
//执行上传操作
public function _upload()
{
import("@.ORG.UploadFile");
$upload = new UploadFile();
//设置上传文件大小
$upload->maxSize = 32922000 ;
//设置上传文件类型
$upload->allowExts = explode(',','xls,et,jpg');
//设置附件上传目录 目录一定要带有Public的字眼,否则将有写入权限的限制
$upload->savePath = './Public/myfiles/';
//设置上传文件规则
$upload->saveRule = uniqid;
if(!$upload->upload()) {
//捕获上传异常
$this->assign("waitSecond",60);
$this->error($upload->getErrorMsg());
}else {
//取得成功上传的文件信息
$uploadList = $upload->getUploadFileInfo();
$_POST['savename'] = $uploadList[0]['savename'];
}
$model = M ('File');
//保存当前数据对象
$data['fileName']=$_POST['savename'] ;
$data['uploadTime']=time() ;
$list = $model->add ($data);
if($list!==false){
$this->assign("waitSecond",60);
$this->success ('上传文件成功!');
}else{
$this->assign("waitSecond",60);
$this->error ('上传文件失败!');
}
}