ThinkPHP之文件上传

在项目当中,我们有的时候需要上传图片的功能,简单的从面相过程的方法是相对较为复杂的,要一步一步的来,如果用框架的话,相对就简单了许多,主要就是方法以及每一个变量所代表的意义,然后就是一些注意的地方了。

首先,从视图页面说起,要先做好文件的上传表单控件,这里我就出现了一个错误,没有加上文件的特有属性而导致控制器取不到文件,如下所示一个简单的界面:

<!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();
        }

    }
时间: 2024-10-12 22:16:17

ThinkPHP之文件上传的相关文章

thinkphp实现文件上传

文件上传详细讲解 http://www.thinkphp.cn/info/194.html 上传根目录不存在问题解决方法 http://www.thinkphp.cn/topic/10779.html

ThinkPHP - 文件上传

获取上传类 ThinkPHP的扩展中提供了文件上传类库UploadFile,可以在在http://www.thinkphp.cn/extend/224.html下载,或者下载官方的完整扩展包(http://www.thinkphp.cn/down/253.html)里面也已经包含上传扩展类了.如果是单独下载的上传类库,把解压后的UploadFile.class.php 放入ThinkPHP/Extend/Library/ORG/Net/(如果没有请手动创建)目录下面. 效果: 前台代码: 1 <

2016/05/19 thinkphp 3.2.2 文件上传

显示效果:  多文件上传.  这里是两个文件一起上传 上传到文件夹的效果: ①aa为调用Home下common文件夹下的function.php  中的rname方法  实现的 ②cc为调用与Home平级文件夹common下的common文件夹下的function.php 以上是放公共方法的地方   程序可以自动调用 ③一瓶水.gif 的显示: 在linux操作系统下不会出现乱码   但在windows下会出现乱码 解决办法:找到核心目录  thinkphp下的library下的Upload下的

ThinkPHP教程_PHP框架之ThinkPHP(十三)【文件上传】

一.文件上传 文件上传需要使用到ORG类库包中的Net.UploadFile类,所以得通过import()函数引入该类 1.基本功能 也就是ORG.Net.UploadFile类的基本功能,不过有些功能(对上传的图片文件生成缩略图)得结合ThinkPHP的ORG.Util.Image类实现,不过ORG.Util.Image类不需要手动引入,而是在UploadFile类中upload方法自动引入的! ·基本上传(单文件上传) ·批量上传 批量上传相对于基本上传,只需要修改下表单即可 UploadF

Thinkphp 验证码、文件上传

一.验证码 验证码参数 例题:登录时验证下验证码 LoginController.class.php <?php namespace Home\Controller; use Think\Controller; class LoginController extends Controller { public function Login() { if(empty($_POST)) { $this->display(); } else { //判断验证码是否正确 $code = $_POST[

实例讲解ThinkPHP的UploadFile文件上传类的详细用法

ThinkPHP文件上传自带了上传类,使用起来非常方便,我们将以一个文件上传实例来讲解ThinkPHP上传类的实际用法,上传类使用时有详细的中文注释,可以非常方便的告诉你类的一些方法或变量的使用方法.FileAction.class.php PHP Code复制内容到剪贴板 <?php class FileAction extends Action{ function index(){ $file=M('file'); $list=$file->select(); $this->assi

thinkphp文件上传

TP框架中的文件上传类似于php原生的文件上传方法,只不过TP框架将文件上传的方法封装成类来使用 1.首先我们在控制器类文件中写出一个上传的显示页面的方法 public function shangchuan(){ $this->show(); } 同时我们在相对应的视图文件夹view中的创建出前端显示页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o

ThinkPHP讲解(十一)——验证码和文件上传

一.验证码 1.页面前端显示 (验证码是图片标签,来源是控制器里的yzm()操作方法) <h1>登录</h1> <form action="__ACTION__" method="post"> <div>用户名:<input type="text" name="uid"/></div> <div>密码:<input type="

thinkphp 文件上传类wamp环境无法上传文件问题解决

环境: 1.wamp:php5.4.12 2.ThinkPHP_Extend_3.1.2 中UploadFile.class.php 代码: function upload(){ import('UploadFile.class'); $upload = new UploadFile();// 实例化上传类 $upload->maxSize  = 3145728 ;// 设置附件上传大小 $upload->allowExts  = array('jpg', 'gif', 'png', 'jpe