Home / PostsPost

如何在 Symfony2 中使用阿里云OSS SDK

嘟噜聪2015/01/27 15:13:24 4933人已阅

简介 这里介绍是一种非常简单方便的方案,只需要修改一个composer.json文件 然后执行一条命令就完成了,目前我将会在windows的DOS环境下演示。

这里介绍是一种非常简单方便的方案,只需要修改一个composer.json文件 然后执行一条命令就完成了,目前我将会在windows的DOS环境下演示。

关于composer的使用我这就不多作介绍了,网上有很多资料,等我把网站建设完后,有时间我会单独写一些关于composer的相关知识。

好吧,我们开始

    首先咱们要去阿里云下载OSS的SDK包。

    PHP SDK 开发包(2014-06-25)
    下载并解压后会得下如下图样的东西

    


    /demo 目录里有一个官方提供的一个小例子,可以参考参考(说实话,阿里提供的文档真少)。

    /docs 目录是空的我也不晓得里边有啥。

    /lang 语言包

    /lib 扩展包 

    /logs 日志目录

    /services 空的

    /util 这里边有个文件获取文件类型的

    config.inc.php 配制文件

    sdk.class.php 这个才是真身,只要引入这个就行了

    其实真正有用的目录就4个

 

好了咱们把以上这4个目录及两个文件放到 /项目目录/app/lib/AliyunOSS 目录下,没有的话就创建(注意不是在/web/目录下)

放进去后 几位修改 /项目目录/composer.json 文件


{
    "autoload": {
        "psr-0": { "": "src/" },
        /** 在这里加上 classmap参数 然后指定路径 */
        "classmap": [
            "app/lib/AliyunOSS/sdk.class.php"
        ]
    },
}
在autoload这个参数下另上 classmap 这个参数 然后指定路径,也就是刚刚咱们放SDK的那个目录。


打开DOS窗口 进入到 /项目目录/ 执行命令


composer dump-autoload
执行成功后打开 /项目目录/vendor/composer/autoload_classmap.php



<?php

// autoload_classmap.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
    'ALIOSS' => $baseDir . '/app/lib/AliyunOSS/sdk.class.php',
    'Collator' => $vendorDir . '/symfony/symfony/src/Symfony/Component/Intl/Resources/stubs/Collator.php',
    'IntlDateFormatter' => $vendorDir . '/symfony/symfony/src/Symfony/Component/Intl/Resources/stubs/IntlDateFormatter.php',
    'Locale' => $vendorDir . '/symfony/symfony/src/Symfony/Component/Intl/Resources/stubs/Locale.php',
    'NumberFormatter' => $vendorDir . '/symfony/symfony/src/Symfony/Component/Intl/Resources/stubs/NumberFormatter.php',
    'OSS_Exception' => $baseDir . '/app/lib/AliyunOSS/sdk.class.php',
    'SessionHandlerInterface' => $vendorDir . '/symfony/symfony/src/Symfony/Component/HttpFoundation/Resources/stubs/SessionHandlerInterface.php',
    'SqlFormatter' => $vendorDir . '/jdorn/sql-formatter/lib/SqlFormatter.php',
);
应该多了一行 
'ALIOSS' => $baseDir . '/app/lib/AliyunOSS/sdk.class.php',

这时就表示成功了,可以在控制器里加载了

<?php

namespace Demo\AdminBundle\Controller;


use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\File;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Filesystem\Exception\IOExceptionInterface;

use ALIOSS;
class ImageController extends Controller{

    /**
     * 上传图片
     * @Route("/uploadImage")
     * @param Request $request
     * @return JsonResponse
     */
    public function uploadImageAction( Request $request )
    {
        $fileUrl = 'http://uploads.lattecake.com/images/life/';
        if( $request->files )
        {
           /* $OSS_access_id  = $this->container->getParameter('OSS_access_id');
            $OSS_access_key = $this->container->getParameter('OSS_access_key');*/

            $dir = './uploads/images/life/'.date('Y/m/');
            foreach ($request->files as $file)
            {
                $name = md5( $file->getClientOriginalName(). microtime() ).'.'.$file->guessExtension();
                $fileUrl = $fileUrl.date('Y/m/').$name;
                $fs = new Filesystem();
                if( !$fs->exists( $dir ) )
                {
                    try {
                        $fs->mkdir( $dir );
                    } catch (IOExceptionInterface $e) {
                        echo "An error occurred while creating your directory at ".$e->getPath();
                    }
                }
                $file->move( $dir,  $name );

                /*$oss_sdk_service = new ALIOSS($OSS_access_id, $OSS_access_key);

                //设置是否打开curl调试模式
                $oss_sdk_service->set_debug_mode(TRUE);


                $bucket = 'lattecake';
                $options = array(
                    ALIOSS::OSS_CONTENT_TYPE => 'text/xml'
                );

                //print_r($oss_sdk_service->get_bucket_acl($bucket, $options));die;


                $object = 'netbeans-7.1.2-ml-cpp-linux.sh';
                $file_path = $dir.$name;

                $response = $oss_sdk_service->upload_file_by_file($bucket, $name, $file_path);

                echo '|-----------------------Start---------------------------------------------------------------------------------------------------'."\n";
                echo '|-Status:' . $response->status . "\n";
                echo '|-Body:' ."\n";
                echo $response->body . "\n";
                echo "|-Header:\n";
                print_r ( $response->header );
                echo '-----------------------End-----------------------------------------------------------------------------------------------------'."\n\n";

                die;*/

                break;
            }
        }
        $response =  [
            'error' => 0,
            'url'   => $fileUrl
        ];
        return new JsonResponse($response);
    }
} 
然后这样就可以使用 阿里云的 OSS了 

OSS_access_id 与 OSS_access_key 放在常量里面,等有时间我再写 symfony2常量要怎么配制吧。

部分代码我删除掉了,大家都懂的...

原创,需要转载,请注明出处,谢谢合作



很赞哦! (1)

文章评论

点击排行

本栏推荐

标签

站点信息

  • 微信公众号