您当前的位置: 首页  >  博文日记

laravel接收上传图片视频并压缩保存的方法

作者:总管理员 时间:2023-02-20 06:48:21 阅读数:616人阅读

我们在接收小程序或h5上传来的图片时,首先要判断图片数量,如果为0则直接返回:

        $num = count($request->file());//文件数量
        if($num == 0){
            return response()->json(['code' => 500,'msg' => '图片为空']);
        }

然后要判断文件是否已上传完成,并进行类型判定,过滤非图片文件提升安全性。下面的代码中,小程序传递了图片大小px参数,按照给定的px进行压缩,如果不传递,则直接保存:

if ($request->hasFile('file')) {
	$file =  $request->file('file');
	$mimeTye = $file->getMimeType();
	if($mimeTye == 'image/jpeg' or $mimeTye == 'image/png' or $mimeTye == 'image/jpg'){
	    //是否传递了压缩
	    if($request->imgwh && extension_loaded('exif') && extension_loaded('imagick')){
	        $entension = $file->getClientOriginalExtension();//后缀名
	        $fileName = date('ymdhis').rand(100,999).'.'.$entension;// 随机文件名
	        $imgwh = explode("/",$request->imgwh);
	        $destinationPath = '/uploads/images/'; //存放目录
	        $img = Image::make($file)->resize($imgwh[0], $imgwh[1]);
	        $img->save(public_path().$destinationPath.$fileName);
	        return response()->json(['code' => 200,'data' => url($destinationPath.$fileName),'msg' => '上传成功']);
	    }else{
	        $url = url('uploads/'.$request->file('file')->store('images','admin'));
	        return response()->json(['code' => 200,'data' => $url,'msg' => '上传成功']);
	    }
	}elseif($mimeTye == 'video/mp4'){
	     $url = url('uploads/'.$request->file('file')->store('images','admin'));
	     return response()->json(['code' => 200,'data' => $url,'msg' => '上传成功']);
	}else{
		return response()->json(['code' => 500,'msg' => '失败成功']);
	}
}

如果是博客等,一般不指定压缩的图片大小,由于现在的手机和相机图片都太大了,需要检测图片大小,并保持原有比例进行压缩:

public function uploadimg(Request $request)
{
    if(count($request->file()) > 0){
        foreach($request->file() as $flie){
            $ext = $flie->getClientOriginalExtension() ?? $flie->extension();//后缀
            if(extension_loaded('exif') && extension_loaded('imagick')){
                $img = Image::make($flie);//压缩图片
                if($img->width() > 1080){
                    $img->widen(1080);//宽度指定1080,高度等比例缩放
                }elseif($img->height() > 1920){
                    $img->heighten(1920);//高度指定1920,宽度等比例缩放
                }
                $img->save();//覆盖原图
                $newName = date('YmdHis-').mt_rand(100,999).'.'.$ext;
                $path[] = url('uploads/'.$flie->storeAs('blog'.DIRECTORY_SEPARATOR.'image'.DIRECTORY_SEPARATOR.date('Ymd'),$newName,'admin'));
            }else{
                $path[] = url('uploads/'.$flie->store('blog','admin'));
            }
        }
    }
    return $path ? ["errno"=>0,"data"=>$path]: ["errno"=>'上传失败'];
}

图片上传使用了php的扩展,需要先use:

use Intervention\Image\Facades\Image;

如果没有安装该扩展,需要先安装:

composer require intervention/image

图片上传要特别注意安全性,防止伪装成木马的图片上传。一般采取压缩方式即可消除该隐患。

本站所有文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知我们删除。邮箱: 2554509967@qq.com

标签: laravel

需要 登录 才能发表评论
热门评论
0条评论

暂时没有评论!