开通服务,创建空间用于文件存储,参考接入指引
点击下面链接下载 PHP SDK (含 Demo)
下载 PHP SDK 后解压缩可见如下目录,其中PHP示例位于 SDK 压缩包的 demo 目录下。
1 2 3 4 5 6 7 8 9 | |—— 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 后,运行即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 | $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判断是否调用成功。
1 2 3 4 5 6 7 | array( 13 ) { 'eTag' => string( 32 ) "E523542F5F69268CC1999081B405E7DE" 'requestId' => string( 36 ) "a4de8f2b-0808-433f-ac4b-b9e4eeca5336" 'code' => string( 2 ) "OK" 'isSuccess' => bool( true ) } |
如果失败具体详细信息请参考code, message字段内容。
1 2 3 4 5 6 | 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节介绍。上传时根据用户需要选择使用。
1 2 | require_once( 'alimedia/alimage.class.php' ); $aliImage = new AlibabaImage($ak, $sk); //设置AK和SK |
初始化传入参数:
AK: 开发者的AccessKeyId。
SK: 开发者的AccessKeySecret。
用户AK/SK的获取方式请参照第 3 节 Demo 中的描述。
指定需要上传的文件路径,调用上传接口完成文件上传。该上传方法会根据文件大小,自动进行分片,开发者无需关心大文件分片上传的问题,开发者可以通过UploadOption设置分片大小。同时,上传的文件默认会覆盖服务端已存在的同名文件。调用示例如下:
简单上传
1 2 3 4 | /*使用如下方法上传文件。上传的文件默认存储在空间根目录下,服务端的文件名采用本地文件默认名称。*/ $aliImage = new AlibabaImage($ak, $sk); //设置AK和SK $uploadPolicy = new UploadPolicy( $namespace ); // 上传策略。并设置空间名 $res = $aliImage->upload( 'image/tinyImg.jpg' , $uploadPolicy ); |
上传并通过UploadPolicy指定文件路径和名称
1 2 3 4 5 6 | /*使用如下方法上传文件。通过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指定文件路径和名称
1 2 3 4 5 6 7 | /*使用如下方法上传文件。通过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 ); |
上传字符串保存到文件
1 2 3 4 5 6 | /*将字符串上传并保存到文件。并设置文件的名称和路径。*/ $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 ); |
以字节方式上传文件
1 2 3 4 5 6 7 | /*以字节的方式上传文件。并设置文件的名称和路径。*/ $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中封装了分片上传相关的方法。如下所示:
设置分片上传的参数
1 2 3 4 5 6 7 8 | $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 |
初始化分片上传
1 2 3 | /*根据设置的参数,初始化分片上传*/ $filePath = 'image/largeImg.jpg' ; $httpRes = $aliImage->multipartInit( $filePath, $uploadPolicy, $uploadOption ); |
分片上传文件
1 2 3 | /*开发者需要根据分片大小,计算出文件块数,然后调用如下方法上传每个文件块*/ $uploadOption->setPartNumber($i); //待上传的文件块编号 $httpRes = $aliImage->multipartUpload( $filePath, $uploadPolicy, $uploadOption ); |
分片上传完成
1 2 3 | /*当所有文件块都上传成功后,需要计算整个文件的md5,然后调用分片上传完成接口*/ $uploadOption->setMd5(md5_file ( iconv( 'UTF-8' , 'GB2312' ,$filePath) )); $httpRes = $aliImage->multipartComplete( $uploadPolicy, $uploadOption ); |
分片上传取消
1 2 | /*当某个文件块上传失败后,取消分片上传*/ $httpRes = $aliImage->multipartCancel( $uploadPolicy, $uploadOption ); |
判断文件是否存在
1 2 3 4 5 6 7 | /**文件是否存在 * @param sting $namespace 空间名,必须 * @param sting $dir 路径 * @param sting $filename 文件名 * @return array */ public function existsFile($namespace, $dir, $filename); |
获取文件信息
1 2 3 4 5 6 7 | /**获取文件的元信息(meta信息) * @param sting $namespace 空间名,必须 * @param sting $dir 路径 * @param sting $filename 文件名 * @return array */ public function getFileInfo($namespace, $dir, $filename); |
重命名文件
1 2 3 4 5 6 7 8 9 | /**重命名文件,若新的路径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) |
列出文件夹下文件列表
1 2 3 4 5 6 7 | /**获取指定目录下的文件列表 * @param sting $namespace 空间名,必须 * @param sting $dir 路径 * @param number $page 页数 * @param number $pageSize 每页显示的记录数 */ public function listFiles($namespace, $dir, $page = 1 , $pageSize = 100 ) |
删除文件
1 2 3 4 5 6 7 | /**删除文件 * @param sting $namespace 空间名,必须 * @param sting $dir 路径 * @param sting $filename 文件名 * @return array */ public function deleteFile($namespace, $dir, $filename) |
判断文件夹是否存在
1 2 3 4 5 6 | /**文件夹是否存在 * @param sting $namespace 空间名,必须 * @param sting $dir 路径,即文件夹 * @return array */ public function existsFolder($namespace, $dir) |
创建文件夹
1 2 3 4 5 6 | /**创建文件夹 * @param sting $namespace 空间名,必须 * @param sting $dir 路径,即文件夹 * @return array */ public function createDir($namespace, $dir) |
列出文件夹列表
1 2 3 4 5 6 7 | /**获取指定目录下的文件夹列表 * @param sting $namespace 空间名,必须 * @param sting $dir 路径,指定目录 * @param number $page 页数 * @param number $pageSize 每页显示的记录数 */ public function listDirs($namespace, $dir, $page = 1 , $pageSize = 100 ) |
删除文件夹
1 2 3 4 5 6 | /**删除文件夹 * @param sting $namespace 空间名,必须 * @param sting $dir 路径,即文件夹 * @return array */ public function deleteDir($namespace, $dir) |
黄图扫描接口
1 2 3 4 5 6 7 8 9 10 11 | /**黄图扫描接口 * @param ManageOption $resInfos 待扫描图片资源 * @return array */ public function scanPorn( ManageOption $resInfos ); /**添加待扫描文件信息。*/ ManageOption::addResource($namespace, $dir, $name); /**添加待扫描URL信息。*/ ManageOption::addUrl($url); |
图片扫描结果反馈接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /**鉴黄反馈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) |
示例代码
扫描指定的资源文件是否为黄图
1 2 3 4 | $resourceInfos = new ManageOption(); $resourceInfos->addResource($namespace,$dir, "test1.png" ); //可以指定多个 $resourceInfos->addResource( "testSpace" , null , "test2.jpg" ); $res = $aliImage->scanPorn( $resourceInfos ); //扫描指定的图片 |
扫描指定的URL是否为黄图
1 2 3 4 | $resourceInfos = new ManageOption(); $res = $aliImage->scanPorn( $resourceInfos ); |
注意:黄图扫描接口,文件资源和URL无法同时添加。
反馈黄图扫描结果
1 2 3 4 5 6 | $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 ); |
多媒体转码接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /**多媒体(音视频)转码服务接口 * @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; //截取音视频的长度 } |
多媒体转码任务查询接口
1 2 3 4 | /**多媒体转码任务查询接口 * @param string $taskId 转码任务ID */ public function mediaEncodeQuery($taskId); |
示例代码
将指定视频的格式转码为mp4格式,并指定转码后保存的文件名和路径
1 2 3 4 5 6 | $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 |
查询多媒体转码任务的进度和结果
1 2 | $taskId = "55a53a16e1720ed0c67005ae43a0a0c335d8b5a7e37e" ; //转码任务ID $res = $aliImage->mediaEncodeQuery($taskId); |
视频截图接口
1 2 3 4 5 6 7 8 9 10 11 12 13 | /**视频截图接口 * @param SnapShotOption $snapshotOption 截图参数选项 * @return array */ public function videoSnapshot( SnapShotOption $snapshotOption ); /**视频截图的参数*/ class SnapShotOption extends MediaResOption{ /** 视频截图的位置,单位为毫秒。该属性必须*/ private $time; /** 通知url,任务结束之后会调用这个url。该属性可选 */ private $notifyUrl; } |
视频截图结果查询接口
1 2 3 4 | /**视频截图结果查询接口 * @param string $taskId 转码任务ID */ public function vSnapshotQuery( $taskId ) |
示例代码
获取视频在指定时刻的截图
1 2 3 4 5 | $snapshotOption = new SnapShotOption(); $snapshotOption->setInputResource($namespace, "/video" , "test.wmv" ); //待截图的视频文件 $snapshotOption->setOutputResource($namespace, "/temp" , "test_snap.jpg" ); //得到的截图文件 $snapshotOption->setTime( 2000 ); //设置截图的位置。单位毫秒 $res = $aliImage->videoSnapshot($snapshotOption); //返回结果包含任务ID |
查询视频截图的结果
1 2 | $taskId = "f3150e6fa2d84eeda7ea0777474f87a1" ; //截图任务ID $res = $aliImage->vSnapshotQuery($taskId); |
广告图扫描接口
1 2 3 4 5 6 7 8 9 10 11 12 | /** * 广告图扫描接口(beta) * @param ManageOption $resInfos 待扫描图片资源 * @return array */ public function scanAdvertising( ManageOption $resInfos ) /**添加待扫描文件信息。*/ ManageOption::addResource($namespace, $dir, $name); /**添加待扫描URL信息。*/ ManageOption::addUrl($url); |
示例代码
扫描指定的资源文件是否为广告图
1 2 3 4 | $adInfos = new ManageOption(); $adInfos->addResource($namespace,$dir, "test1.png" ); //可以指定多个 $adInfos->addResource( "tempSpace" , null , "test2.jpg" ); $res = $aliImage->scanAdvertising( $adInfos ); //扫描指定的图片 |
扫描指定的URL是否为广告图
1 2 3 4 | $adInfos = new ManageOption(); $res = $aliImage->scanAdvertising( $adInfos ); |
注意:广告图扫描接口,文件资源和URL无法同时添加。