thinkphp5 文件上传的两种方式

文件上传

代码如下:

/**
 * 上传文件
 * @author sxt
 * @param string $field_name 上传的参数名
 * @param string $save_dir 保存目录
 * @param array $config 配置 大小 和 扩展名
 * @return array|string
 */
function upload($field_name='image',$save_dir='/upload/image',$config=['size'=>1048576,'ext'=>'jpg,png,gif']){
    // 获取表单上传文件 例如上传了001.jpg
    $file = request()->file($field_name);
    if(empty($file)){
        return '未选择上传文件!';
    }
    // 移动到框架应用根目录/public/uploads/ 目录下
    $info = $file->validate($config)->move(ROOT_PATH . 'public' .$save_dir);
    if($info){
        // 成功上传后 获取上传信息
        return ['save_path'=>$save_dir.'/'.str_replace('\\','/',$info->getSaveName()),'ext'=>$info->getExtension(),'filename'=>$info->getFilename()];
    }else{
        // 上传失败获取错误信息
        return $file->getError();
    }
}


/**
 * 保存base64提交的图片文件
 * @author lhw
 * @param string $base64_image    图片的编码字符串
 * @param bool $domain          是返回带域名url地址
 * @param array $config         默认配制,dir:保存的目录名称,相对路径或绝对路径;url:相对于域名访问的路径地址;ext:图片扩展名称;size:图片文件大小
 * @throws Exception
 * @return void|array           返回保存后带目录的文件名称和访问url地址
 */
function saveBase64Image($base64_image, $domain = false, $config = [])
{
    //默认配制
    $conf = ['dir'=>'./upload/image/','url'=>'/upload/image/','ext'=>['png','jpg','jpeg','gif'],'size'=>2000000];
    if (!empty($config)) {
        //合并配制
        $conf = array_merge($conf, $config);
    }
    //$base64_image为图片的编码字符串
    if (empty($base64_image)) {
        return ;
    }

    preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image, $result);
    try{
        if (count($result) != 3) {
            throw new \think\Exception('图片数据不正确。');
        }
        $file_ext = strtolower($result[2]);
        if (!in_array($file_ext, $conf['ext'])) {
            throw new \think\Exception('上传图片文件扩展不支持。');
        }
        if (strlen($base64_image) > $conf['size']) {
            throw new \think\Exception('上传图片文件太大了。');
        }

        $date           = date('Ymd');
        $pathname       = $conf['dir'].'/'.$date;

        if (!is_dir($pathname) && !mkdir($pathname, 0777, true)) {
            throw new \think\Exception('保存的图片目录没有权限。');
        }
        $name       = md5($base64_image).'.'.$file_ext;      //图片文件名加上图片扩展
        $savepath   = $pathname.'/'.$name;                  //图片保存目录
        //对图片进行解析并保存
        if (!file_put_contents($savepath, base64_decode(str_replace($result[1], '', $base64_image)))) {
            throw new \think\Exception('保存图片文件失败。');
        }

        $server_name = '';
        if ($domain) {
            $server_name = '//'.$_SERVER['SERVER_NAME'];
            if (is_ssl() || (isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], 'https://') === 0)) {
                $server_name = 'https:'.$server_name;
            }
        }
        $saveurl = $server_name.$conf['url'].'/'.$date.'/'.$name;
        return ['dir'=>$savepath, 'url'=>$saveurl];
    }catch (Exception $e){
        showJson($e->getMessage());
    }
}`

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值