文件上传之图片上传示例

最近刚好做了一个关于图片上传的操作,就把以前在培训时候的笔记翻出来,做了一个简单的图片上传。(才工作,不好勿喷~)
我之前学的yii2框架,现在公司用tp框架,不多说,上码!
if (IS_POST) {//判断是否为post数据

$count = M('custom_made')->where(array('uid' => $this->user['uid']))->count();//从存有用户提交图片信息的数据表中查询是否存在该用户的记录
if ($count == 0) {//判断是否重复提交
    $cc_name = $_FILES['cc_pic']['name'];//数据是二维数组,['cc_pic']是前端上传图片input标签的name,['name']是客户端上传图片的name(含后缀
    $check_name = './d/images/' . $cc_name;//./是根目录,文件存放在根目录d文件夹中images文件夹下的,以‘./d/images/’+上传图片的原始名保存(含后缀
    $result = M('custom_made')->where(array('cc_pic' => $check_name))->count();//将上述需要进行查询的$check_name作为查询条件
    if ($result < 1) {//判断图片名称是否重复
        $cc_tmp_name = $_FILES['cc_pic']['tmp_name'];//服务端存储的临时文件名

        //情况可能是这样的:前端编码utf8;数据库编码utf8;上传过程中因为是直接获取文件名,apache没有经过前端的编码处理,使得文件名编码方式为gbk,此时就需要转码了!
        $cc_name_iconv = iconv('utf-8', 'gbk', $_FILES['cc_pic']['name']);//ps:连接数据库的时候,也要设置$connect->query("set names utf8")

        $cc_type = $_FILES['cc_pic']['type'];//文件类型
        $cc_size = $_FILES['cc_pic']['size'];//文件大小
        //判断图片是否符合要求。要求为四中格式之一且大小小于等于2M(以b为单位:2*1024*1024 b
        if ($cc_type == 'image/jpg' || $cc_type == 'image/gif' || $cc_type == 'image/png' || $cc_type == 'image/jpeg' && $cc_size <= 2097152) {
            if (move_uploaded_file($cc_tmp_name, './d/images/' . $cc_name_iconv)) {//move_uploaded_file()第一个参数为临时存放的文件名,第二个参数为你需要移动的位置包含原始文件名
                $map['cc_pic'] = './d/images/' . $cc_name;
                $map['uid'] = $this->user['uid'];//用户名
                $map['ctime'] = time();//上传时间
                M('custom_made')->add($map);//存入数据库
                $error = '文件上传成功!';
                $this->assign('error', $error);//不要看见error就认为是错误提示,只是为了方便统一把正确与错误提示同名了!
                $this->display();
            }
        } elseif ($cc_size > 2097152) {
            $error = '图片过大,请重新选择小于2M的图片进行上传!';
            $this->assign('error', $error);
            $this->display();
        } else {
            $error = '图片格式不符合,请选择jpg/png/gif/jpeg格式的图片进行上传!';
            $this->assign('error', $error);
            $this->display();
        }
    } else {
        $error = '图片名称已存在,请重命名图片进行上传!';
        $this->assign('error', $error);
        $this->display();
    }
} else {
    $error = '请勿重复上传文件!';
    $this->assign('error', $error);
    $this->display();
}} else {
$this->display();}

以下是前端最基础也是必须要的内容(因为用的tp框架,所以会有{$error}存在),不给用<>这个标签,将就看吧~
《form action=”” method=”post” enctype=”multipart/form-data”》
《input type=”file” name=”cc_pic”》{$error}
《/form》

点赞