class Merchant_ApiDefaultController extends Zend_Controller_Action {
protected $customer = '';
public function preDispatch(){
$this->customer = Merchant_Service_Customer::getLoginInfo()->customer;
}
public function uploadImageAlibabaCloudAction() {
$return = array('ask' => 0, 'msg' => '');
$filename = $_FILES['picture']['name'];
// 图片资源
$uploadContents = @file_get_contents($_FILES['picture']['tmp_name']);
Merchant_Service_AlibabaCloudInterface::upload('exceptionImages/' . $filename, $uploadContents);
// 获得缩略图存储的临时位置
$serviceObj = new Merchant_Service_Product();
$targetDir = $serviceObj->getPictureUploadDir($this->customer['customer_id']);
// 生成略缩图
$targetFileThumb = $targetDir . "/thumb_" . $filename;
@Merchant_Service_ProductAttached::makeThumbnail($_FILES['picture']['tmp_name'], $targetFileThumb, 75, 75);
Merchant_Service_AlibabaCloudInterface::upload('exceptionImages/thumb_' . $filename, $targetFileThumb, 'links');
@unlink($targetFileThumb);
$return['ask'] = 1;
$return['msg'] = Zend_I18n::getInstance()->translate('1101166');
$return['filename'] = $filename;
$return['filepath'] = 'http://cff-img.oss-cn-shenzhen.aliyuncs.com/exceptionImages/' . $filename;
die(Zend_Json::encode($return));
}
}
class Merchant_Service_Product {
/**
* 获得创建产品图片上传的临时目录
* return string
*/
public function getPictureUploadDir($customerId = null){
$customerId = $this->getCustomerId($customerId);
$customerDir = '/var/www/CFF/front/application'."/../data/images/".$customerId;
if(!file_exists($customerDir)){
if(mkdir($customerDir)){
chmod($customerDir,0777);
}
}
return $customerDir;
}
}
class Merchant_Service_ProductAttached {
/**
* 生成略缩图
* 只考虑jpg,png,gif格式
* $srcImgPath 源图象路径
* $targetImgPath 目标图象路径
* $targetW 目标图象宽度
* $targetH 目标图象高度
*/
public static function makeThumbnail($srcImgPath, $targetImgPath, $targetW, $targetH) {
$imgSize = GetImageSize($srcImgPath);
$imgType = $imgSize[2];
//@ 使函数不向页面输出错误信息
switch ($imgType) {
case 1:
$srcImg = @ImageCreateFromGIF($srcImgPath);
break;
case 2:
$srcImg = @ImageCreateFromJpeg($srcImgPath);
break;
case 3:
$srcImg = @ImageCreateFromPNG($srcImgPath);
break;
}
//取源图象的宽高
$srcW = ImageSX($srcImg);
$srcH = ImageSY($srcImg);
if($srcW>$targetW || $srcH>$targetH) {
$targetX = 0;
$targetY = 0;
if ($srcW > $srcH) {
$finaW=$targetW;
$finalH=round($srcH*$finaW/$srcW);
$targetY=floor(($targetH-$finalH)/2);
} else {
$finalH=$targetH;
$finaW=round($srcW*$finalH/$srcH);
$targetX=floor(($targetW-$finaW)/2);
}
//function_exists 检查函数是否已定义
//ImageCreateTrueColor 本函数需要GD2.0.1或更高版本
if(function_exists("ImageCreateTrueColor")) {
$targetImg=ImageCreateTrueColor($finaW,$finalH);
} else {
$targetImg=ImageCreate($finaW,$finalH);
}
$targetX=($targetX<0)?0:$targetX;
$targetY=($targetX<0)?0:$targetY;
$targetX=($targetX>($finaW/2))?floor($finaW/2):$targetX;
$targetY=($targetY>($finalH/2))?floor($finalH/2):$targetY;
//背景白色
$white = ImageColorAllocate($targetImg, 255,255,255);
ImageFilledRectangle($targetImg,0,0,$finaW,$finalH,$white);
/*
PHP的GD扩展提供了两个函数来缩放图象:
ImageCopyResized 在所有GD版本中有效,其缩放图象的算法比较粗糙,可能会导致图象边缘的锯齿。
ImageCopyResampled 需要GD2.0.1或更高版本,其像素插值算法得到的图象边缘比较平滑,
该函数的速度比ImageCopyResized慢。
*/
if(function_exists("ImageCopyResampled")) {
ImageCopyResampled($targetImg,$srcImg,0,0,0,0,$finaW,$finalH,$srcW,$srcH);
} else {
ImageCopyResized($targetImg,$srcImg,0,0,0,0,$finaW,$finalH,$srcW,$srcH);
}
switch ($imgType) {
case 1:
ImageGIF($targetImg,$targetImgPath);
break;
case 2:
ImageJpeg($targetImg,$targetImgPath);
break;
case 3:
ImagePNG($targetImg,$targetImgPath);
break;
}
ImageDestroy($srcImg);
ImageDestroy($targetImg);
} else {
//不超出指定宽高则直接复制
copy($srcImgPath,$targetImgPath);
ImageDestroy($srcImg);
}
}
}
require_once '/var/www/CFF/front/libs/aliyun-oss-php-sdk-master/autoload.php';
use OSS\OssClient;
use OSS\Core\OssException;
class Merchant_Service_AlibabaCloudInterface {
private static $accessKeyId = 'LTAIG8whza7A84nK';
private static $accessKeySecret = 'Pjhf8hB6rmnZRZX9AMVSWSO8ESkeWQ';
private static $endpoint = 'http://oss-cn-shenzhen.aliyuncs.com';
/**
* 上传
* @param String $name 名
* @param String $filepath 文件路径
* @param String $type 操作类型
* @param String $bucket 传入
*/
public static function upload($name, $filepath, $type = 'source', $bucket = 'cff-img') {
set_time_limit(0);
try {
if ($type == 'links') {
$filepath = @file_get_contents($filepath);
}
$obj = new OssClient(self::$accessKeyId, self::$accessKeySecret, self::$endpoint);
$obj->putObject($bucket, $name, $filepath);
} catch (OssException $exc) {
Default_Service_Common::logErrorByFiles($exc->getMessage(), 'alibabaCloudInterface.log');
}
}
}
注:需要下载并加载阿里云类包
上传图片阿里云
最新推荐文章于 2024-02-20 19:00:48 发布