ThinkPHP之文件上传
2015-06-02 20:14
519 查看
在项目当中,我们有的时候需要上传图片的功能,简单的从面相过程的方法是相对较为复杂的,要一步一步的来,如果用框架的话,相对就简单了许多,主要就是方法以及每一个变量所代表的意义,然后就是一些注意的地方了。
首先,从视图页面说起,要先做好文件的上传表单控件,这里我就出现了一个错误,没有加上文件的特有属性而导致控制器取不到文件,如下所示一个简单的界面:
在接下来,我们选择了图片或者其他的文件,点击上传,就必须要控制器进行接收,直接有常量$_files检查文件的选择是否存在,至于这个对象里面都有什么元素,可以用print_r的方法进行输出查看,接下来就是实例化文件上传功能的upload类(这之前一定要配置类),用upload或者uploadOne(一个文件)上传文件,但是我绝得上传完不是目的,关键是要使用它,能够实现永久使用的除了文件就是数据库,因为图片本身就是文件,而且从数据安全性的方面来考虑,应当优先使用数据库,但是我们不可能把整个图片数据都保存在数据库,这里就有一个办法,也能够解决很多难以解决的问题,比如数据分配等,这样的话就简单明了多了,把图片的url保存在数据库,这样数据量很小,资源耗费很少就可以解决问题,但是,即便数据量小,我还是有一些低估了,我把数据设置成了64个字节,但是这测试的时候有数据溢出,因为文件名称是经过MD5运算过的所以,会变长一些,所以我把字符长度设置成了128位,这样问题就得到了解决,不多说了,还是直接上代码把:
首先,从视图页面说起,要先做好文件的上传表单控件,这里我就出现了一个错误,没有加上文件的特有属性而导致控制器取不到文件,如下所示一个简单的界面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>附件上传</title> </head> <body> <form action="{$smarty.const.__SELF__}" enctype="multipart/form-data" method="post"> 上传文件(图片)<input type="file" name="file_1"><br/> <input type="submit" value="上传图片"> <img src="{$img_url}"> </form> </body> </html>
在接下来,我们选择了图片或者其他的文件,点击上传,就必须要控制器进行接收,直接有常量$_files检查文件的选择是否存在,至于这个对象里面都有什么元素,可以用print_r的方法进行输出查看,接下来就是实例化文件上传功能的upload类(这之前一定要配置类),用upload或者uploadOne(一个文件)上传文件,但是我绝得上传完不是目的,关键是要使用它,能够实现永久使用的除了文件就是数据库,因为图片本身就是文件,而且从数据安全性的方面来考虑,应当优先使用数据库,但是我们不可能把整个图片数据都保存在数据库,这里就有一个办法,也能够解决很多难以解决的问题,比如数据分配等,这样的话就简单明了多了,把图片的url保存在数据库,这样数据量很小,资源耗费很少就可以解决问题,但是,即便数据量小,我还是有一些低估了,我把数据设置成了64个字节,但是这测试的时候有数据溢出,因为文件名称是经过MD5运算过的所以,会变长一些,所以我把字符长度设置成了128位,这样问题就得到了解决,不多说了,还是直接上代码把:
if(!empty($_POST)){ if(!empty($_FILES)){ // show_bug($_FILES); $config=array( 'rootPath' => './Public/', //保存根路径 'savePath' => 'Upload/', //保存路径 ); $upload=new \Think\Upload($config); $z=$upload->uploadOne($_FILES['file_1']); if($z){ $info=D('pic'); //取出文件路径以及名称 $filename=IMG_UPLOAD_URL.$z['savepath'].$z['savename']; // echo $filename; $info->name=$filename; // $info_save=$info->save(); $info_save=$info->add(); $res=$info->select(); if($info_save>=0){ $this->assign('img_url',$res[0]['name']); // show_bug($info); echo $res[0]['name']; $this->display(); } // $this->display(); }else{ echo "No"; show_bug($upload->getError()); } } }else{ $this->display(); } }
相关文章推荐
- PHP回调函数--call_user_func_array
- php学习随记4
- AES加密解密(使用php扩展mcrypt实现AES加密)
- 通过cmd命令到ftp上下载文件
- PHP String函数分类
- 一个ContentProvider的Demo
- 如何自定义一个优雅的ContentProvider
- PHP如何使用GeoIP数据库
- PHP数组排序方法总结
- PHP中常用代码块集锦
- PHP学习:文件操作
- PHP读取大文件的几种方法
- 使用PHP制作 简易员工管理系统之四(完善主界面以及显示员工信息)
- thinkphp时间戳转化
- php加载速度提高方法
- php怎么将数组数组转化为json格式的数据
- 使用PHP制作 简易员工管理系统之三(管理员登陆界面以及数据库验证)
- PHP正则表达式报错分析
- windows下PHP不能开启pgsql扩展的解决方法
- php学习随记3