开通服务,创建空间用于文件存储,参考接入指引
点击下面链接下载 PHP SDK (含 Demo)
下载 PHP SDK 后解压缩可见如下目录,其中PHP示例位于 SDK 压缩包的 demo 目录下。
|—— alimedia: 该文件夹即为PHP SDK。 |—— alimage.class.php: 用户使用PHP SDK需要引入该文件 |—— demo: 该文件夹下包含SDK中所有接口的调用示例。 |—— image: 用于上传测试的文件 |—— upload.php: 调用上传接口,进行文件上传的示例 |—— uploadData.php: 调用上传接口,进行字符串上传的示例 |—— uploadMutipart.php: 调用分片上传接口,创建分片上传任务的示例 |—— manage.php: 调用管理接口,进行资源管理和使用特色服务的示例 |—— README.md: 介绍文档
以 upload.php 文件为例,开发者填入自己的AK、SK 和 namespace 后,运行即可。
$ak = '<user app key>'; // 用户的AK (user app key) $sk = '<user secret key)>'; // 用户的SK (user secret key) $namespace = '<user namespace>'; // 空间名称 (user namespace) //第一步:(必须)引入AlibabaImage类,并设置AK和SK $aliImage = new AlibabaImage($ak, $sk); //设置AK和SK //第二步:(必须)在上传策略UploadPolicy中指定用户空间名。也可以根据需要设置其他参数 $uploadPolicy = new UploadPolicy( $namespace ); // 上传策略。并设置空间名 //第三步:(必须)进行文件上传 $res = $aliImage->upload( 'image/tinyImg.jpg', $uploadPolicy ); var_dump($res);
如何获取 AK 和 SK?
所有接口都是集成到AlibabaImage类中。返回值为PHP 数组array结构。根据array中isSuccess判断是否调用成功。
array(13) { 'eTag' => string(32) "E523542F5F69268CC1999081B405E7DE" 'requestId' => string(36) "a4de8f2b-0808-433f-ac4b-b9e4eeca5336" 'code' => string(2) "OK" 'url' => string(73) "http://test.image.alimmdn.com/image_c1449469480" 'isSuccess' => bool(true) }
如果失败具体详细信息请参考code, message字段内容。
array(4) { ["message"]=> string(13) "InternalError" ["requestId"]=> string(36) "390671e3-d2a8-4425-be76-c081119d5813" ["code"]=> string(13) "InternalError" ["isSuccess"]=> bool(false) }
上传策略可以参照RestAPI文档2.1节介绍。上传时必须在上传策略中指定空间名 namespace。
上传选项可以参照RestAPI文档2.6节介绍。上传时根据用户需要选择使用。
require_once('alimedia/alimage.class.php'); $aliImage = new AlibabaImage($ak, $sk); //设置AK和SK
初始化传入参数:
AK: 开发者的AccessKeyId。
SK: 开发者的AccessKeySecret。
用户AK/SK的获取方式请参照第 3 节 Demo 中的描述。
指定需要上传的文件路径,调用上传接口完成文件上传。该上传方法会根据文件大小,自动进行分片,开发者无需关心大文件分片上传的问题,开发者可以通过UploadOption设置分片大小。同时,上传的文件默认会覆盖服务端已存在的同名文件。调用示例如下:
简单上传
/*使用如下方法上传文件。上传的文件默认存储在空间根目录下,服务端的文件名采用本地文件默认名称。*/ $aliImage = new AlibabaImage($ak, $sk); //设置AK和SK $uploadPolicy = new UploadPolicy( $namespace ); // 上传策略。并设置空间名 $res = $aliImage->upload( 'image/tinyImg.jpg', $uploadPolicy );
上传并通过UploadPolicy指定文件路径和名称
/*使用如下方法上传文件。通过UploadPolicy设置文件上传到服务端的名称和路径。*/ $aliImage = new AlibabaImage($ak, $sk); //设置AK和SK $uploadPolicy = new UploadPolicy( $namespace ); // 上传策略。并设置空间名 $uploadPolicy->dir = '/temp'; // 文件路径,(默认根目录"/") $uploadPolicy->name = 'image_'.time(); // 文件名,(若为空,则默认使用文件名) $res = $aliImage->upload( 'image/tinyImg.jpg', $uploadPolicy );
上传并通过UploadOption指定文件路径和名称
/*使用如下方法上传文件。通过UploadOption设置文件上传到服务端的名称和路径。*/ $aliImage = new AlibabaImage($ak, $sk); //设置AK和SK $uploadPolicy = new UploadPolicy( $namespace ); // 上传策略。并设置空间名 $uploadOption = new UploadOption(); $uploadOption->dir = '/temp'; // 文件路径,(默认根目录"/") $uploadOption->name = 'image_'.time(); // 文件名,(若为空,则默认使用文件名) $res = $aliImage->upload( 'image/tinyImg.jpg', $uploadPolicy, $uploadOption );
上传字符串保存到文件
/*将字符串上传并保存到文件。并设置文件的名称和路径。*/ $aliImage = new AlibabaImage($ak, $sk); //设置AK和SK $uploadPolicy = new UploadPolicy($namespace); // 上传策略。并设置空间名 $uploadPolicy->dir = '/temp'; // 文件路径,(默认根目录"/") $uploadPolicy->name = 'text_'.time(); // 文件名,(若为空,则默认使用文件名) $res = $aliImage->uploadData( 'Hello! Ali Media Service!', $uploadPolicy );
以字节方式上传文件
/*以字节的方式上传文件。并设置文件的名称和路径。*/ $aliImage = new AlibabaImage($ak, $sk); //设置AK和SK $uploadPolicy = new UploadPolicy($namespace); // 上传策略。并设置空间名 $uploadPolicy->dir = '/temp'; // 文件路径,(默认根目录"/") $uploadPolicy->name = 'image_'.time(); // 文件名,(若为空,则默认使用文件名) $data = file_get_contents ( 'image/tinyImg.jpg' ); //读本地图片内容到字符串中 $res = $aliImage->uploadData( $data, $uploadPolicy );
如果开发者想要在代码中调用分片上传接口,控制并了解分片上传的细节,SDK中封装了分片上传相关的方法。如下所示:
设置分片上传的参数
$aliImage = new AlibabaImage($ak, $sk); //设置AK和SK $uploadPolicy = new UploadPolicy($namespace); // 上传策略。并设置空间名 $uploadPolicy->dir = '/temp'; // 文件路径,(默认根目录"/") $uploadPolicy->name = 'image_'.time(); // 文件名,(若为空,则默认使用文件名) //(可选)开发者可以在UploadOption中设置文件分片的大小(范围100K < size < 10M) //如果不指定分块大小,则为默认值2M $uploadOption = new UploadOption(); $uploadOption->blockSize = 1*1024*1024; //设置分块大小为1M
初始化分片上传
/*根据设置的参数,初始化分片上传*/ $filePath = 'image/largeImg.jpg'; $httpRes = $aliImage->multipartInit( $filePath, $uploadPolicy, $uploadOption );
分片上传文件
/*开发者需要根据分片大小,计算出文件块数,然后调用如下方法上传每个文件块*/ $uploadOption->setPartNumber($i); //待上传的文件块编号 $httpRes = $aliImage->multipartUpload( $filePath, $uploadPolicy, $uploadOption );
分片上传完成
/*当所有文件块都上传成功后,需要计算整个文件的md5,然后调用分片上传完成接口*/ $uploadOption->setMd5(md5_file ( iconv('UTF-8','GB2312',$filePath) )); $httpRes = $aliImage->multipartComplete( $uploadPolicy, $uploadOption );
分片上传取消
/*当某个文件块上传失败后,取消分片上传*/ $httpRes = $aliImage->multipartCancel( $uploadPolicy, $uploadOption );
判断文件是否存在
/**文件是否存在 * @param sting $namespace 空间名,必须 * @param sting $dir 路径 * @param sting $filename 文件名 * @return array */ public function existsFile($namespace, $dir, $filename);
获取文件信息
/**获取文件的元信息(meta信息) * @param sting $namespace 空间名,必须 * @param sting $dir 路径 * @param sting $filename 文件名 * @return array */ public function getFileInfo($namespace, $dir, $filename);
重命名文件
/**重命名文件,若新的路径newDir与老的路径dir不一致,则视为文件移动 * @param string $namespace 空间名,必须 * @param string $dir 路径 * @param string $filename 文件名 * @param string $newDir 新的路径 * @param string $newName 新的文件名 * @return array */ public function renameFile($namespace, $dir, $filename, $newDir, $newName)
列出文件夹下文件列表
/**获取指定目录下的文件列表 * @param sting $namespace 空间名,必须 * @param sting $dir 路径 * @param number $page 页数 * @param number $pageSize 每页显示的记录数 */ public function listFiles($namespace, $dir, $page = 1, $pageSize = 100)
删除文件
/**删除文件 * @param sting $namespace 空间名,必须 * @param sting $dir 路径 * @param sting $filename 文件名 * @return array */ public function deleteFile($namespace, $dir, $filename)
判断文件夹是否存在
/**文件夹是否存在 * @param sting $namespace 空间名,必须 * @param sting $dir 路径,即文件夹 * @return array */ public function existsFolder($namespace, $dir)
创建文件夹
/**创建文件夹 * @param sting $namespace 空间名,必须 * @param sting $dir 路径,即文件夹 * @return array */ public function createDir($namespace, $dir)
列出文件夹列表
/**获取指定目录下的文件夹列表 * @param sting $namespace 空间名,必须 * @param sting $dir 路径,指定目录 * @param number $page 页数 * @param number $pageSize 每页显示的记录数 */ public function listDirs($namespace, $dir, $page = 1, $pageSize = 100)
删除文件夹
/**删除文件夹 * @param sting $namespace 空间名,必须 * @param sting $dir 路径,即文件夹 * @return array */ public function deleteDir($namespace, $dir)
黄图扫描接口
/**黄图扫描接口 * @param ManageOption $resInfos 待扫描图片资源 * @return array */ public function scanPorn( ManageOption $resInfos ); /**添加待扫描文件信息。*/ ManageOption::addResource($namespace, $dir, $name); /**添加待扫描URL信息。*/ ManageOption::addUrl($url);
图片扫描结果反馈接口
/**鉴黄反馈feedback接口 * @param ManageOption $pornFbInfos 反馈信息 * @return array */ public function pornFeedback( ManageOption $pornFbInfos ); /**添加鉴黄反馈信息。 * @param string $namespace 空间名[必须]。 * @param string $dir 路径。为空则默认根目录 * @param string $name 文件名。不能为空 * @param bool $type 黄图类型[必须]。0或者1,0是非黄图,1是黄图 * @param bool $wrong 鉴黄判断[必须]。true代表用户认为多媒体鉴黄服务的结果有问题。当为true的时候必须传score * @param decimal $score 黄图分值。[可选]取值范围[0-1],值越高则是黄图可能性越高 */ ManageOption::addPornFbInfo($namespace, $dir, $name, $type, $wrong, $score)
示例代码
扫描指定的资源文件是否为黄图
$resourceInfos = new ManageOption(); $resourceInfos->addResource($namespace,$dir,"test1.png");//可以指定多个 $resourceInfos->addResource("testSpace",null,"test2.jpg"); $res = $aliImage->scanPorn( $resourceInfos );//扫描指定的图片
扫描指定的URL是否为黄图
$resourceInfos = new ManageOption(); $resourceInfos->addUrl("http://test2.image.alimmdn.com/testImg1.jpg"); $resourceInfos->addUrl("http://test2.image.alimmdn.com/testImg2.jpg"); $res = $aliImage->scanPorn( $resourceInfos );
注意:黄图扫描接口,文件资源和URL无法同时添加。
反馈黄图扫描结果
$pornFbInfos = new ManageOption(); //反馈"testImg1.jpg"不是黄图 $pornFbInfos->addPornFbInfo($namespace, $dir, "testImg1.jpg", 0, false); //反馈"testImg2.jpg"是黄图,且设置评分为0.99 $pornFbInfos->addPornFbInfo($namespace, $dir, "testImg2.jpg", 1, true, 0.99); $res = $aliImage->pornFeedback( $pornFbInfos );
多媒体转码接口
/**多媒体(音视频)转码服务接口 * @param MediaEncodeOption $encodeOption 转码参数选项 * @return array */ public function mediaEncode( MediaEncodeOption $encodeOption ); /**多媒体转码的参数*/ class MediaEncodeOption extends MediaResOption{ /* 以下属性是"视频转码"方法必须的属性 */ private $encodeTemplate; //模板名称。可以设置系统或者用户自定义模板。用户模板名称可以登录后台查看和设置,系统模板见附录系统模板列表 public $usePreset = 0; //是否使用系统模板。默认0。如果为1,则encodeTemplate必须设置系统模板名称 public $force = 0; //是否强制覆盖。默认0,如果为1,当output文件已经存在的时候会强制覆盖,否则不执行转码并结束任务 /* 以下属性是"视频转码"方法可选的属性 */ private $watermark; //水印资源 private $watermarkTemplate; //用户自定义水印模板 private $notifyUrl; //通知url,任务结束之后会调用这个url private $seek; //截取音视频的开始位置 private $duration; //截取音视频的长度 }
多媒体转码任务查询接口
/**多媒体转码任务查询接口 * @param string $taskId 转码任务ID */ public function mediaEncodeQuery($taskId);
示例代码
将指定视频的格式转码为mp4格式,并指定转码后保存的文件名和路径
$encodeOption = new MediaEncodeOption(); $encodeOption->setInputResource($namespace, "/video", "test.wmv"); //待转码的文件 $encodeOption->setOutputResource($namespace, "/video", "test_out.mp4"); //转码后的文件 $encodeOption->usePreset = 1; //指定使用系统的转码模板 $encodeOption->setEncodeTemplate("video-generic-AVC-360p-16_9"); //根据usePreset参数,决定使用用户模板还是系统模板 $res = $aliImage->mediaEncode($encodeOption); //返回结果包含任务ID
查询多媒体转码任务的进度和结果
$taskId = "55a53a16e1720ed0c67005ae43a0a0c335d8b5a7e37e"; //转码任务ID $res = $aliImage->mediaEncodeQuery($taskId);
视频截图接口
/**视频截图接口 * @param SnapShotOption $snapshotOption 截图参数选项 * @return array */ public function videoSnapshot( SnapShotOption $snapshotOption ); /**视频截图的参数*/ class SnapShotOption extends MediaResOption{ /** 视频截图的位置,单位为毫秒。该属性必须*/ private $time; /** 通知url,任务结束之后会调用这个url。该属性可选 */ private $notifyUrl; }
视频截图结果查询接口
/**视频截图结果查询接口 * @param string $taskId 转码任务ID */ public function vSnapshotQuery( $taskId )
示例代码
获取视频在指定时刻的截图
$snapshotOption = new SnapShotOption(); $snapshotOption->setInputResource($namespace, "/video", "test.wmv"); //待截图的视频文件 $snapshotOption->setOutputResource($namespace, "/temp", "test_snap.jpg"); //得到的截图文件 $snapshotOption->setTime(2000); //设置截图的位置。单位毫秒 $res = $aliImage->videoSnapshot($snapshotOption); //返回结果包含任务ID
查询视频截图的结果
$taskId = "f3150e6fa2d84eeda7ea0777474f87a1";//截图任务ID $res = $aliImage->vSnapshotQuery($taskId);
广告图扫描接口
/** * 广告图扫描接口(beta) * @param ManageOption $resInfos 待扫描图片资源 * @return array */ public function scanAdvertising( ManageOption $resInfos ) /**添加待扫描文件信息。*/ ManageOption::addResource($namespace, $dir, $name); /**添加待扫描URL信息。*/ ManageOption::addUrl($url);
示例代码
扫描指定的资源文件是否为广告图
$adInfos = new ManageOption(); $adInfos->addResource($namespace,$dir,"test1.png");//可以指定多个 $adInfos->addResource("tempSpace",null,"test2.jpg"); $res = $aliImage->scanAdvertising( $adInfos );//扫描指定的图片
扫描指定的URL是否为广告图
$adInfos = new ManageOption(); $adInfos->addUrl("http://test2.image.alimmdn.com/testImg1.jpg"); $adInfos->addUrl("http://test2.image.alimmdn.com/testImg2.jpg"); $res = $aliImage->scanAdvertising( $adInfos );
注意:广告图扫描接口,文件资源和URL无法同时添加。