PHP 파일 업로드를 위해 Alibaba Cloud OSS 사용
이 글에서는 주로 Alibaba Cloud OSS 이미지 업로드 클래스의 PHP 버전을 소개하고, Alibaba Cloud OSS 이미지 업로드 클래스의 PHP 버전에 대한 기능, 정의, 사용 방법 및 관련 주의 사항을 구체적인 예의 형태로 분석합니다. 도움이 필요한 친구들이 참고하면 좋을 것 같아요.
자세한 내용은 다음과 같습니다.
1. Alibaba Cloud 기본 기능
/** * 把本地变量的内容到文件 * 简单上传,上传指定变量的内存值作为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']['tmp_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(), // 允许上传的文件类型 留空不做检查 'thumb' => false, // 使用对上传图片进行缩略图处理 'imageClassPath' => 'ORG.Util.Image', // 图库类包路径 'thumbMaxWidth' => '',// 缩略图最大宽度 'thumbMaxHeight' => '',// 缩略图最大高度 'thumbPrefix' => 'thumb_',// 缩略图前缀 'thumbSuffix' => '', 'thumbPath' => '',// 缩略图保存路径 'thumbFile' => '',// 缩略图文件名 'thumbExt' => '',// 缩略图扩展名 'thumbRemoveOrigin' => 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); }
4. 핵심 처리 기능
/** * 上传所有文件 * @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['name'])) { //登记上传文件的扩展信息 if(!isset($file['key'])) $file['key'] = $key; $file['extension'] = $this->getExt($file['name']); $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['tmp_name'],$file['error']); $fileInfo[] = $file; $isUpload = true; } } if($isUpload) { $this->uploadFileInfo = $fileInfo; return true; }else { $this->error = '没有选择上传文件'; return false; } }
5.
요약:과 일반 업로드의 차이점은 모두 Alibaba Cloud의 OSS 인터페이스를 통해 파일 저장을 처리한다는 것입니다. 일반 업로드는 로컬 파일을 서버로 이동하고 파일을 Alibaba Cloud 서버로 이동합니다.
썸네일 아이디어:a. 이미지를 서버에 업로드합니다.
b. 처리할 이미지를 가져옵니다.c. 원본 이미지를 삭제하거나 삭제하지 않습니다. 구성에 따른 서버(OSS) Yii2.0 Alibaba Cloud OSS를 통합하여 단일 파일을 삭제하는 방법에 대한 자세한 예 thinkPHP의 간단한 방법에 대한 자세한 소개 Alibaba Cloud OSSsdk 가져오기 및 사용 PHP 애플리케이션 Qiniu Cloud의 리디렉션 업로드 및 콜백 업로드 예시 공유 위 내용은 PHP 파일 업로드를 위해 Alibaba Cloud OSS 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!/**
* 上传一个文件
* @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','bmp','png','swf'))) {
$info = getimagesize($file['tmp_name']);
if(false === $info || ('gif' == strtolower($file['extension']) && empty($info['bits']))){
$this->error = '非法图像文件';
return false;
}
}
if(!$this->putObject($file['tmp_name'], $this->autoCharset($filename,'utf-8','gbk'))) {
$this->error = '文件上传保存错误!';
return false;
}
if($this->thumb && in_array(strtolower($file['extension']),array('gif','jpg','jpeg','bmp','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); $i<$len; $i++) {
if(!empty($thumbFile[$i])) {
$thumbname = $thumbFile[$i];
}else{
$prefix = isset($thumbPrefix[$i])?$thumbPrefix[$i]:$thumbPrefix[0];
$suffix = isset($thumbSuffix[$i])?$thumbSuffix[$i]:$thumbSuffix[0];
$thumbname = $prefix.basename($filename,'.'.$file['extension']).$suffix;
}
$this->thumb(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['type'] : $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['red'], $trnprt_color['green'], $trnprt_color['blue']);
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);
else
imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight);
// 对jpeg图形设置隔行扫描
if ('jpg' == $type || 'jpeg' == $type)
imageinterlace($thumbImg, $interlace);
imagePNG($thumbImg,'Uploads/file.png'); // 中转站
// 生成图片
$this->putObject('Uploads/file.png',$thumbname);
imagedestroy($thumbImg);
imagedestroy($srcImg);
return $thumbname;
}
return false;
}
관련 권장 사항:

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP에서 데이터베이스 작업은 매우 쉽습니다. 이번 장에서는 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 이해하겠습니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu
