PHP ThinkPHP ,上传文件(图片),制作缩略图,批量上传文件

本文介绍了如何在PHP的ThinkPHP框架下进行文件上传操作,特别是图片,详细讲解了如何处理上传的文件,并制作缩略图。同时,还提及了批量上传文件的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


GoodsModel.class.php(模型Model类):

<?php

//商品goodsmodel模型

namespace Model;
use Think\Model;

class GoodsModel extends Model{
    //自动完成设置add_time/upd_time
    protected $_auto = array(
        array('add_time','time',1,'function'),
        array('upd_time','time',3,'function'),
    );

    // 插入数据前的回调方法(上传单个文件(图片),制作缩略图)
    //参数:
    //$data 是收集的表单信息
    //&$data  是“引用”传递,函数内部改变之,外边也可以访问到
    //$options 是设置的各种条件
    protected function _before_insert(&$data,$options) {
        //上传图片处理
        if($_FILES['goods_logo']['error']===0){//图片没有错误才处理
            //1) 上传原图图片
            //通过Think/Upload.class.php实现附件上传
            $cfg = array(
                'rootPath'      =>  './Common/Uploads/', //保存根路径
            );
            $up = new \Think\Upload($cfg);
            $z = $up -> uploadOne($_FILES['goods_logo']);  //上传单个文件
            //$z会返回成功上传附件的相关信息
            //dump($z);

            //拼装图片的路径名信息,存储到数据库里边
            $big_path_name = $up->rootPath.$z['savepath'].$z['savename'];
            $data['goods_big_logo'] = $big_path_name;

            //2) 根据原图($big_path_name)制作缩略图
            $im = new \Think\Image();//实例化对象
            $im -> open($big_path_name); //打开原图
            $im -> thumb(60,60); //制作缩略图
            //缩略图名字:“small_原图名字”
            $small_path_name = $up->rootPath.$z['savepath']."small_".$z['savename'];
            $im -> save($small_path_name);//存储缩略图到服务器
            //保存缩略图到数据库
            $data['goods_small_logo'] = $small_path_name;
        }
    }

    // 插入成功后的回调方法(批量上传文件(图片))
    protected function _after_insert($data,$options) {
        //上传相册图片判断(只要有一个相册上传,就往下进行)
        $flag = false;
        foreach($_FILES['goods_pics']['error'] as $a => $b){
            if($b === 0){
                $flag = true;
                break;
            }
        }
        if($flag === true){
            //商品相册图片上传
            $cfg = array(
                'rootPath'      =>  './Common/Pics/', //保存根路径
            );
            //dump($_FILES);
            $up = new \Think\Upload($cfg);
            $z = $up -> upload(array('goods_pics'=>$_FILES['goods_pics']));  //批量上传文件
            //通过返回值$z可以看到对应的上传ok的附件信息
            //dump($z);

            //遍历$z,获得每个附件的信息,存储到数据表中goods_pics
            foreach($z as $k => $v){
                $pics_big_name = $up->rootPath.$v['savepath'].$v['savename'];
                
                /******根据大图,制作缩略图******/
                $im = new \Think\Image();//实例化对象
                $im -> open($pics_big_name); //打开原图
                $im -> thumb(60,60); //制作缩略图
                //缩略图名字:“small_原图名字”
                $pics_small_name = $up->rootPath.$v['savepath']."small_".$v['savename'];
                $im -> save($pics_small_name);//存储缩略图到服务器
                /******根据大图,制作缩略图******/

                //goods_id($data['goods_id']), pics_big, pics_small
                $arr = array(
                    'goods_id' => $data['goods_id'],
                    'pics_big' => $pics_big_name,
                    'pics_small' => $pics_small_name,
                );
                //实现相册存储
                D('GoodsPics')->add($arr);
            }
        }
    }

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值