• 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 ThinkUpload($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();
            }
    
        }
  • 相关阅读:
    React中路由的基本使用
    React中props
    一款超级炫酷的编辑代码的插件 Power Mode
    React中使用styled-components的基础使用
    对ES6的一次小梳理
    动态规划法(七)鸡蛋掉落问题(二)
    动态规划法(六)鸡蛋掉落问题(一)(egg dropping problem)
    三对角线性方程组(tridiagonal systems of equations)的求解
    Sherman-Morrison公式及其应用
    动态规划法(四)0-1背包问题(0-1 Knapsack Problem)
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/7354252.html
Copyright © 2020-2023  润新知