后端开发|php教程
php,使用,阿里
后端开发-php教程
本文主要介绍了php版阿里云OSS图片上传类,结合具体实例形式分析了php版阿里云OSS图片上传类的功能、定义、使用方法与相关注意事项。需要的朋友可以参考下,希望对大家有所帮助。
php相册源码站长,ubuntu去掉开机自检,tomcat开机自启动问题,使用python实现爬虫,哪里租php服务器好,日韩网站seolzw
具体如下:
奇站 源码,vscode必用插件,ubuntu终端 运行,为idea添加tomcat,爬虫 wooyun,php 生成报表,短视频seo推广系统,网站模版 免费下载,手机模板桌面lzw
1.阿里云基本函数
手游源码去哪里弄,vscode 使用 svn,ubuntu 男装,tomcat log很大,哪些软件要用到sqlite,魔兽世界60版本机器人插件,前端图表框架是什么意思,网络爬虫技术抓取信息,php 返回乱码,杭州seo优化建议,宾馆网站模板,html网页页面动态效果代码,oa主页模板lzw
/** * 把本地变量的内容到文件 * 简单上传,上传指定变量的内存值作为object的内容 */public function putObject($imgPath,$object){ $content = file_get_contents($imgPath); // 把当前文件的内容获取到传入文件中 $options = array(); try { $this->ossClient->putObject($this->bucket, $object, $content, $options); } catch (OssException $e) { return $e->getMessage(); } return TRUE;}/** * 上传指定的本地文件内容 */public function uploadFile($imgPath,$object) //$_FILES[img][ mp_name]{ $filePath = $imgPath; $options = array(); try { $this->ossClient->uploadFile($this->bucket, $object, $filePath, $options); } catch (OssException $e) { return $e->getMessage(); } return TRUE;}// 删除对象public function deleteObject($object) { try { $this->ossClient->deleteObject($this->bucket, $object); } catch (OssException $e) { return $e->getMessage(); } return TRUE;}// 判断对象是否存在public function doesObjectExist($object) { try { $result = $this->ossClient->doesObjectExist($this->bucket, $object); } catch (OssException $e) { return $e->getMessage(); } return $result;}// 批量删除对象public function deleteObjects($objects) { try { $this->ossClient->deleteObjects($this->bucket, $objects); } catch (OssException $e) { return $e->getMessage(); } return TRUE;}/** * 获取object的内容 * * @param OssClient $ossClient OssClient实例 * @param string $bucket 存储空间名称 * @return null */public function getObject($object){ $options = array(); try { $content = $this->ossClient->getObject($this->bucket, $object, $options); } catch (OssException $e) { return $e->getMessage(); } // file_get_contents return $content;}
2.基本配置与辅助函数
public $ossClient,$bucket;private $configinfo = array( maxSize=> -1, // 上传文件的最大值 supportMulti => true, // 是否支持多文件上传 allowExts=> array(), // 允许上传的文件后缀 留空不作后缀检查 allowTypes => array(), // 允许上传的文件类型 留空不做检查 humb => false, // 使用对上传图片进行缩略图处理 imageClassPath => ORG.Util.Image, // 图库类包路径 humbMaxWidth => \,// 缩略图最大宽度 humbMaxHeight => \,// 缩略图最大高度 humbPrefix => humb_,// 缩略图前缀 humbSuffix => \, humbPath=> \,// 缩略图保存路径 humbFile=> \,// 缩略图文件名 humbExt=> \,// 缩略图扩展名 humbRemoveOrigin => false,// 是否移除原图 zipImages=> false,// 压缩图片文件上传 autoSub=> false,// 启用子目录保存文件 subType=> hash,// 子目录创建方式 可以使用hash date custom subDir=> \, // 子目录名称 subType为custom方式后有效 dateFormat => Ymd, hashLevel=> 1, // hash的目录层次 savePath=> \,// 上传文件保存路径 autoCheck=> true, // 是否自动检查附件 uploadReplace => false,// 存在同名是否覆盖 saveRule=> uniqid,// 上传文件命名规则 hashType=> md5_file,// 上传文件Hash规则函数名 );// 错误信息private $error = \;// 上传成功的文件信息private $uploadFileInfo ;public function __get($name){ if(isset($this->configinfo[$name])) { return $this->configinfo[$name]; } return null;}public function __set($name,$value){ if(isset($this->configinfo[$name])) { $this->configinfo[$name] = $value; }}public function __isset($name){ return isset($this->configinfo[$name]);}/** * 架构函数 * @access public * @param array $config 上传参数 */public function __construct($config=array()) { if(is_array($config)) { $this->config = array_merge($this->config,$config); } $this->bucket = C(OSS_TEST_BUCKET); $this->ossClient = new OssClient(C(OSS_ACCESS_ID), C(OSS_ACCESS_KEY), C(OSS_ENDPOINT), false);}
3.主函数
/** * 上传所有文件 * @access public * @param string $savePath 上传文件保存路径 * @return string */public function upload($savePath =\) { //如果不指定保存文件名,则由系统默认 if(empty($savePath)) { $savePath = $this->savePath; } $fileInfo = array(); $isUpload = false; // 获取上传的文件信息 // 对$_FILES数组信息处理 $files = $this->dealFiles($_FILES); foreach($files as $key => $file) { //过滤无效的上传 if(!empty($file[ ame])) {//登记上传文件的扩展信息if(!isset($file[key])) $file[key] = $key;$file[extension] = $this->getExt($file[ ame]);$file[savepath] = $savePath;$file[savename] = $this->getSaveName($file);// 自动检查附件if($this->autoCheck) { if(!$this->check($file))return false;}//保存上传文件if(!$this->save($file)) return false;if(function_exists($this->hashType)) { $fun = $this->hashType; $file[hash] = $fun($this->autoCharset($file[savepath].$file[savename],utf-8,gbk));}//上传成功后保存文件信息,供其他地方调用unset($file[ mp_name],$file[error]);$fileInfo[] = $file;$isUpload = true; } } if($isUpload) { $this->uploadFileInfo = $fileInfo; return true; }else { $this->error = 没有选择上传文件; return false; }}
4.核心处理函数
/** * 上传一个文件 * @access public * @param mixed $name 数据 * @param string $value 数据表名 * @return string */private function save($file) { $filename = $file[savepath].$file[savename]; if(!$this->uploadReplace && $this->doesObjectExist($filename)) { // 不覆盖同名文件 $this->error = 文件已经存在!.$filename; return false; } // 如果是图像文件 检测文件格式 if( in_array(strtolower($file[extension]),array(gif,jpg,jpeg,mp,png,swf))) { $info = getimagesize($file[ mp_name]); if(false === $info || (gif == strtolower($file[extension]) && empty($info[its]))){$this->error = 非法图像文件;return false; } } if(!$this->putObject($file[ mp_name], $this->autoCharset($filename,utf-8,gbk))) { $this->error = 文件上传保存错误!; return false; } if($this->thumb && in_array(strtolower($file[extension]),array(gif,jpg,jpeg,mp,png))) { $image = getimagesize(C(OSS_IMG_URL)./.$filename); if(false !== $image) {//是图像文件生成缩略图$thumbWidth = explode(,,$this->thumbMaxWidth);$thumbHeight = explode(,,$this->thumbMaxHeight);$thumbPrefix = explode(,,$this->thumbPrefix);$thumbSuffix = explode(,,$this->thumbSuffix);$thumbFile = explode(,,$this->thumbFile);$thumbPath = $this->thumbPath?$this->thumbPath:dirname($filename)./;$thumbExt = $this->thumbExt ? $this->thumbExt : $file[extension]; //自定义缩略图扩展名// 生成图像缩略图import($this->imageClassPath);for($i=0,$len=count($thumbWidth); $ithumb(C(OSS_IMG_URL)./.$filename,$thumbPath.$thumbname...$thumbExt,\,$thumbWidth[$i],$thumbHeight[$i],true);}if($this->thumbRemoveOrigin) { // 生成缩略图之后删除原图 $this->deleteObject($filename);} } } if($this->zipImags) { // TODO 对图片压缩包在线解压 } return true;}/** * 生成缩略图 * @static * @access public * @param string $image 原图 * @param string $type 图像格式 * @param string $thumbname 缩略图文件名 * @param string $maxWidth 宽度 * @param string $maxHeight 高度 * @param string $position 缩略图保存目录 * @param boolean $interlace 启用隔行扫描 * @return void */public function thumb($image, $thumbname, $type=\, $maxWidth=200, $maxHeight=50, $interlace=true) { // 获取原图信息 $info = Image::getImageInfo($image); if ($info !== false) { $srcWidth = $info[width]; $srcHeight = $info[height]; $type = empty($type) ? $info[ ype] : $type; $type = strtolower($type); $interlace = $interlace ? 1 : 0; unset($info); $scale = min($maxWidth / $srcWidth, $maxHeight / $srcHeight); // 计算缩放比例 if ($scale >= 1) {// 超过原图大小不再缩略$width = $srcWidth;$height = $srcHeight; } else {// 缩略图尺寸$width = (int) ($srcWidth * $scale);$height = (int) ($srcHeight * $scale); } // 载入原图 $createFun = ImageCreateFrom . ($type == jpg ? jpeg : $type); if(!function_exists($createFun)) {return false; } $srcImg = $createFun($image); //创建缩略图 if ($type != gif && function_exists(imagecreatetruecolor))$thumbImg = imagecreatetruecolor($width, $height); else$thumbImg = imagecreate($width, $height);//png和gif的透明处理 by luofei614 if(png==$type){imagealphablending($thumbImg, false);//取消默认的混色模式(为解决阴影为绿色的问题)imagesavealpha($thumbImg,true);//设定保存完整的 alpha 通道信息(为解决阴影为绿色的问题) }elseif(gif==$type){$trnprt_indx = imagecolortransparent($srcImg); if ($trnprt_indx >= 0) {//its transparent$trnprt_color = imagecolorsforindex($srcImg , $trnprt_indx);$trnprt_indx = imagecolorallocate($thumbImg, $trnprt_color[ ed], $trnprt_color[green], $trnprt_color[lue]);imagefill($thumbImg, 0, 0, $trnprt_indx);imagecolortransparent($thumbImg, $trnprt_indx);} } // 复制图片 if (function_exists("ImageCopyResampled"))imagecopyresampled($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight); elseimagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight); // 对jpeg图形设置隔行扫描 if (jpg == $type || jpeg == $type)imageinterlace($thumbImg, $interlace); imagePNG($thumbImg,Uploads/file.jpg); // 中转站 // 生成图片 $this->putObject(Uploads/file.jpg,$thumbname); imagedestroy($thumbImg); imagedestroy($srcImg); return $thumbname; } return false;}
5.辅助函数
/*** 转换上传文件数组变量为正确的方式* @access private* @param array $files 上传的文件变量* @return array*/private function dealFiles($files) { $fileArray = array(); $n= 0; foreach ($files as $key=>$file){if(is_array($file[ ame])) { $keys = array_keys($file); $count = count($file[ ame]); for ($i=0; $ierror($file[error]);return false; } //文件上传成功,进行自定义规则检查 //检查文件大小 if(!$this->checkSize($file[size])) {$this->error = 上传文件大小不符!;return false; } //检查文件Mime类型 if(!$this->checkType($file[ ype])) {$this->error = 上传文件MIME类型不允许!;return false; } //检查文件类型 if(!$this->checkExt($file[extension])) {$this->error =上传文件类型不允许;return false; } //检查是否合法上传 if(!$this->checkUpload($file[ mp_name])) {$this->error = 非法上传文件!;return false; } return true;}// 自动转换字符集 支持数组转换private function autoCharset($fContents, $from=gbk, $to=utf-8) { $from = strtoupper($from) == UTF8 ? utf-8 : $from; $to = strtoupper($to) == UTF8 ? utf-8 : $to; if (strtoupper($from) === strtoupper($to) || empty($fContents) || (is_scalar($fContents) && !is_string($fContents))) {//如果编码相同或者非字符串标量则不转换return $fContents; } if (function_exists(mb_convert_encoding)) {return mb_convert_encoding($fContents, $to, $from); } elseif (function_exists(iconv)) {return iconv($from, $to, $fContents); } else {return $fContents; }}/*** 检查上传的文件类型是否合法* @access private* @param string $type 数据* @return boolean*/private function checkType($type) { if(!empty($this->allowTypes))return in_array(strtolower($type),$this->allowTypes); return true;}/*** 检查上传的文件后缀是否合法* @access private* @param string $ext 后缀名* @return boolean*/private function checkExt($ext) { if(!empty($this->allowExts))return in_array(strtolower($ext),$this->allowExts,true); return true;}/*** 检查文件大小是否合法* @access private* @param integer $size 数据* @return boolean*/private function checkSize($size) { return !($size > $this->maxSize) || (-1 == $this->maxSize);}/*** 检查文件是否非法提交* @access private* @param string $filename 文件名* @return boolean*/private function checkUpload($filename) { return is_uploaded_file($filename);}/*** 取得上传文件的后缀* @access private* @param string $filename 文件名* @return boolean*/private function getExt($filename) { $pathinfo = pathinfo($filename); return $pathinfo[extension];}/*** 取得上传文件的信息* @access public* @return array*/public function getUploadFileInfo() { return $this->uploadFileInfo;}/*** 取得最后一次错误信息* @access public* @return string*/public function getErrorMsg() { return $this->error;}
总结:与普通上传的区别在于,它是全部通过阿里云的oss接口来处理文件保存的。普通上传是把本地文件移动到服务器上,而它则是把文件移动到阿里云服务器上。
缩略图思路:
a.上传图片至服务器
b.获取图片进行处理
c.上传处理好的图片至服务器
d.根据配置,删除或者不删除服务器的原图(OSS)
imagePNG($thumbImg,Uploads/file.jpg); // 中转站// 生成图片$this->putObject(Uploads/file.jpg,$thumbname);unlink(Uploads/file.jpg);imagedestroy($thumbImg);
Yii2.0整合阿里云oss如何删除单个文件的实例详解
详细介绍thinkPHP简单导入和使用阿里云OSSsdk的方法
PHP应用七牛云的重定向上传和回调上传实例分享