laravel接收上传图片视频并压缩保存的方法
作者:总管理员
时间:2023-02-20 06:48:21
阅读数:643人阅读
我们在接收小程序或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
上一篇:数字变革与教育未来
下一篇:php通用工资查询系统使用教程