• SAE学习-使用SAE的Storage服务存储图片


    看到园子里面有同学写了一篇《基于PHP实现阿里云开放存储服务》,围观地址:http://www.cnblogs.com/nosqlcoco/p/3474773.html想起自己也在Sina App Engine(简称SAE)注册了一个开发者账号,而已有一个个人在线简历,所以就尝试这把应用里面用到的图片都放到SAE的Storage服务里面存储,然后在页面从storage里面读取图片地址,打开开发文档,就开始折腾起来。估计是PHP学习的不多,所以遇到的问题还是蛮多的。首先看一下SAE的storage服务内容:

    image

    阿里云的存储服务是现成的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

  • 相关阅读:
    python3 numpy基本用法归纳总结
    MySQL 中的三中循环 while loop repeat 的基本用法
    什么是网关及网关作用
    网络扫描工具nmap
    nmap基本使用方法
    nmap脚本使用总结
    用Delphi将数据导入到Excel并控制Excel
    delphi Form属性设置 设置可实现窗体无最大化,并且不能拖大拖小(写一个WM_EXITSIZEMOVE的空函数)
    Delphi 数据类型列表
    一个队列类的实现(比delphi自带的速度快70倍)(线程安全版本)
  • 原文地址:https://www.cnblogs.com/liminjun88/p/using-the-sae-storage.html
Copyright © 2020-2023  润新知