看到园子里面有同学写了一篇《基于PHP实现阿里云开放存储服务》,围观地址:http://www.cnblogs.com/nosqlcoco/p/3474773.html。想起自己也在Sina App Engine(简称SAE)注册了一个开发者账号,而已有一个个人在线简历,所以就尝试这把应用里面用到的图片都放到SAE的Storage服务里面存储,然后在页面从storage里面读取图片地址,打开开发文档,就开始折腾起来。估计是PHP学习的不多,所以遇到的问题还是蛮多的。首先看一下SAE的storage服务内容:
阿里云的存储服务是现成的php sdk下载的,当前也有Java和C#的版本,而已只要里面填写了accessKeyId和accessKeySecret,可以不要自己的应用部署在阿里云的服务器上,或者它的平台上。所以方式和又拍云相关的图片存储相类似。但是SAE首先没有提供相关的SDK,就是说本地没有Storage的操作方法的源文件,因为这个原因,所以$mystorage=new SaeStorage写出的代码只能部署在SAE PaaS平台上。所以相对于阿里云来说,SAE的storage服务限制还是蛮多的。说到这里,就说一下另外一个MySQL服务,可以跨应用之间调用,但是不能由第三方程序直接调用,也是这个原因。这里可能是各大公司对于IaaS和PaaS定位不同,新浪估计是这样想的,我提供的就是PaaS服务,所以我当然希望你所有的应用和服务都在我的平台上开发,但是可以把各个服务分开计费呀!有的童鞋有云服务器,可能只想用一下你的Storage或者MySQL服务,你这样直接reject掉了人家。
参考的API文档地址是:http://apidoc.sinaapp.com/sae/SaeStorage.html。我在CustomImage.php里面封装了一个方法,本是想写一个CustomImage类,发现写出来错误好多,对PHP面向对象还是不熟悉。代码如下:
<?php
//从SAE的汇总信息拿到这2个key
//属性
//方法
function loadImagesByGroupName($directoryname) { $accessKey = "your app's accessKey";
$secretKey = "your app's secretKey";
$sae_storage = new SaeStorage($accessKey, $secretKey);
$domainName = "projectimages";
$listfiles = $sae_storage->getListByPath($domainName, $directoryname); $files = $listfiles["files"]; $imageUrls = array();
foreach ($files as $imagefile) { $tempName=$directoryname ."/". $imagefile["Name"];
$imageUrl = $sae_storage->getUrl($domainName, $tempName);
array_push($imageUrls, $imageUrl);
} return $imageUrls;
}
//测试方法
//try {
//
// $result = loadImagesByGroupName("cokegame");
// print_r($result);
//} catch (Exception $e) {
// echo "Error:" . $e->getMessage();
//}
?>
说明一下代码逻辑,array getListByPath (string $domain, [string $path = NULL], [int $limit = 100], [int $offset = 0], [int $fold =true]) 获取指定Domain、指定目录下的文件列表,我在后台创建了多个目录,然后每个目录上传了相应的图片,获得的数组里面,我可以拿到文件的名词,然后我调用string getUrl (string $domain, string $filename) 方法,获取到对应图片的url地址,这个URL地址就是从Storage存储里面生成出来的地址,不是从我应用程序部署的地方获取的。比如:http://liminjun-projectimages.stor.sinaapp.com/avatar/my.png。
我在页面呈现的代码如下,就是根据目录,然后显示目录下所有的图片的。当然大家在最开始要控制好,一个目录最多放置多少张图片,要不然性能会有所下降。代码如下:
require_once 'CustomImage.php';
<ul class="itemImageList">
<?php $imagesUrls=loadImagesByGroupName("cokegame");
//使用for对数组进行循环 for($i=0;$i<count($imagesUrls);$i++)
{
?>
<li>
<a href="javascript:void(0);" rel=""><img src=<?php echo $imagesUrls[$i] ?> alt="Coke Gaming Zone Preview Image"></a>
</li>
<?php
}
?>
<div class="clearfix"></div>
</ul>
在一般情况,有PHP使用经验,然后查看相关的API文档还是可以完成一些简单应用需求。在这里大家也了解到阿里云的开放存储服务和SAE的Storage服务的差别,大家在个人项目或者企业项目时,可以综合考虑,选择最适合自己的解决方案。大家可以围观我的应用线上地址:http://liminjun.sinaapp.com