JohnLui/AliyunOSS v2.0 发布,大幅优化了 API 易用性,改进了文件结构

2015-1-9   /   阅读数:40000   /   分类: PHP
    ___     __    _                                    ____    _____   _____
   /   |   / /   (_)   __  __  __  __   ____          / __ \  / ___/  / ___/
  / /| |  / /   / /   / / / / / / / /  / __ \        / / / /  \__ \   \__ \
 / ___ | / /   / /   / /_/ / / /_/ /  / / / /       / /_/ /  ___/ /  ___/ /
/_/  |_|/_/   /_/    \__, /  \__,_/  /_/ /_/        \____/  /____/  /____/
                    /____/

AliyunOSS 是阿里云 OSS 官方 SDK 的 Composer 封装,支持任何 PHP 项目,包括 Laravel、Symfony、TinyLara 等等。Github 地址:https://github.com/johnlui/AliyunOSS

更新记录

* 2017-03-08 `Release v2.0.0` v2 发布,在 API 易用性上进行了大量优化

* 2016-09-12 `Release v1.3.5` 加入文件元信息的设置功能

* 2016-07-20 `Release v1.3.4` 加入文件元信息的获取功能

* 2016-07-20 `Release v1.3.4` 加入文件元信息的获取功能

* 2016-01-31 `Release v1.3.2` 获取指定虚拟文件夹下的所有文件

* 2015-10-23 `Release v1.3` 增加删除、复制、移动文件功能

* 2015-08-07 `Release v1.2` 修复内存泄露 bug

* 2015-01-12 `Release v1.1` 增加内外网配置分离

* 2015-01-09 `Release v1.0` 完善功能,增加 Laravel 框架详细使用教程及代码

安装

安装有两种方式:

① 直接编辑配置文件

将以下内容增加到 composer.json:

require: {
    "johnlui/aliyun-oss": "~2.0"
}

然后运行 `composer update`。

② 执行命令安装

运行命令:

composer require johnlui/aliyun-oss:~2.0

使用(以 Laravel 为例)

构建 Service 文件

新建 app/services/OSS.php,内容可参考:OSS.php,然后修改配置:

... ...

  private $city = '青岛';

  // 经典网络 or VPC

  private $networkType = '经典网络';

  

  private $AccessKeyId = '';

  private $AccessKeySecret = '';

... ...

放入自动加载

遵循 psr-0 的项目(如Laravel 4、CodeIgniter、TinyLara)中:

在 composer.json 中 autoload -> classmap 处增加配置:

"autoload": {
    "classmap": [
      "app/services"
    ]
  }

然后运行 composer dump-autoload。

遵循 psr-4 的项目(如 Laravel 5、Symfony)中:

无需配置,保证目录 `App/Services` 和命名空间 `namespace App\Services;` 一致即可自动加载。

使用

use App\Services\OSS;

// 在外网上传一个文件并指定 options 如:Content-Type 类型

// 更多 options 见:https://github.com/johnlui/AliyunOSS/blob/master/src/oss/src/Aliyun/OSS/OSSClient.php#L142-L148

OSS::publicUpload('bucket', '目标 object 名', '本地文件路径', [
    'ContentType' => 'application/pdf',
    ... ...
]);

更多用法等待着你去发现:https://github.com/johnlui/AliyunOSS/blob/master/example/OSS.php

反馈

有问题请在本文下面留言。

License

除 “版权所有(C)阿里云计算有限公司” 的代码文件外,遵循 MIT license 开源。

WRITTEN BY

avatar

评论:

lee
2016-03-17 17:26
libs目录下的guzzle ,有composer包,为什么作为自己的项目文件加入到项目中呢?
JohnLui
2016-03-17 17:28
@lee:SDK 需要的是绝对可用,版本更新就相当于依赖了别人,别人的错误会弄死自己。
acmagic
2016-01-29 16:35
我申请了一个pull request,麻烦reivew一下。多谢
micheal
2015-12-04 17:53
AliyunOSS好像可以生成图片的缩略图吧?现在还不可以生成么?
董咚懂咚
2015-11-27 18:05
【阿里云】您正在使用的OSS Java SDK 2.0.6版本SetObjectAcl接口存在已知Bug,建议您尽快更换SDK版本。详情:http://tb.cn/CEbuNhx

请问JohnLui/AliyunOSS会更新并升级吗?
JohnLui
2015-11-27 23:38
@董咚懂咚:哥,人家是 java SDK 的 bug。。。。。。。。。。
debuglee
2015-11-25 14:52
Laravel 5.1 无法定制host

ClientException in Command.php line 135:
Undefined index: host
waken
2015-12-05 15:41
@debuglee:我也碰到这个问题了,怎么解决呢?
webshiyue
2015-12-31 18:58
@debuglee:同问,无法定义的 host 索引
jecky
2015-11-23 16:20
Aliyun\OSS\Exceptions\OSSException

The specified bucket is not valid.


yii2 配置一样出现这个情况,怎么回事呢?
oGre
2015-11-19 11:20
你好,我想问下怎么建立一个文件夹?
JohnLui
2015-11-19 12:05
@oGre:OSS 没有文件夹的概念,是 key-file 存储,你可以加上前缀假装文件夹。
阿旭
2015-11-16 09:27
我在上传一个大文件时,大概150M,会抛出异常
Maximum execution time of 30 seconds exceeded

我想可能是超时了,有没有配置项可以设置超时的时间
JohnLui
2015-11-16 09:31
@阿旭:修改 PHP 配置就行。
骑车一公里
2015-10-28 15:45
配置AliyunOSS出现如下错误:
InvalidArgumentException in AssertUtils.php line 55:
Key [Endpoint] was not set.

1. in AssertUtils.php line 55
2. at AssertUtils::assertSet(array('Endpoint', 'AccessKeyId', 'AccessKeySecret'), array('MaxErrorRetry' => '3', 'UserAgent' => 'aliyun-sdk-php/2.0.0-beta', 'CurlOptions' => array(), 'Endpoint' => null, 'AccessKeyId' => null, 'AccessKeySecret' => null)) in OSSClient.php line 399

配置如下:

        'ossServer' => 'http://oss-cn-beijing.aliyuncs.com', //青岛为 http://oss-cn-qingdao.aliyuncs.com
    'ossServerInternal' => 'http://oss-cn-beijing-internal.aliyuncs.com', //青岛为 http://oss-cn-qingdao-internal.aliyuncs.com
    'AccessKeyId' => 'SEi7HOeAkFGAg2gl',
    'AccessKeySecret' => 'r7zdnBMjGwxqU90DDDlYqW3UT2AX9X',
        'timezone' => 'Asia/Shanghai',

目测配置没什么不对的,能帮我看一下吗?
JohnLui
2015-10-28 17:14
@骑车一公里:调用了什么方法?注意 OSSExample 中有不少地方需要你手动修改的。
骑车一公里
2015-10-28 18:59
@JohnLui:试过createBucket, getAllObjectKey都是这种错误,

刚刚又去https://github.com/johnlui/AliyunOSS/blob/master/OSSExample.php更新了一下,OSSExample也重修改过了,还是这样的。

另外, 'ossServer' , 'ossServerInternal','AccessKeyId', 'AccessKeySecret' 的配置与'timezone'配置在同一层次的。
JohnLui
2015-10-29 00:28
@骑车一公里:bucket名称改成你的了没
骑车一公里
2015-10-29 09:54
@JohnLui:凡是有
“$oss->ossClient->setBucket('你的 bucket 名称');”
提示的地方都改了。
JohnLui
2015-10-29 10:51
@骑车一公里:对了,注意看每个函数里面对 OSS 类是初始化代码:
$oss = new OSS(true);
这是选择采用内网传输。如果你都是外网使用,可以改成false或者不传参数。
骑车一公里
2015-10-29 13:07
@JohnLui:都试过了,然而没什么改变,会不会是我在config/app.php添加配置的'ossServer' , 'ossServerInternal','AccessKeyId', 'AccessKeySecret' 层次不对?
JohnLui
2015-10-29 13:22
@骑车一公里:试着打印 Config::get('app.ossServer') 看看正不正确。
骑车一公里
2015-10-29 16:10
@JohnLui:控制器中use Config;后,打印Config::get('app.ossServer') 为NULL。
然后尝试OSS::getAllObjectKey('×××')仍旧报错“Key [Endpoint] was not set.”
JohnLui
2015-10-29 16:19
@骑车一公里:为 null 就是配置错了,可能你给加了一层。。。
骑车一公里
2015-10-29 17:02
@JohnLui:目前就是下面这样的了,添加的配置跟timezone, url都是同一层的

======================= 我是分割线 ===========================

    'url' => 'http://localhost',

    /*
    |--------------------------------------------------------------------------
    | Application Timezone
    |--------------------------------------------------------------------------
    |
    | Here you may specify the default timezone for your application, which
    | will be used by the PHP date and date-time functions. We have gone
    | ahead and set this to a sensible default for you out of the box.
    |
    */

    'timezone' => 'Asia/Shanghai',


    'ossServer' => 'http://oss-cn-beijing.aliyuncs.com', //青岛为 http://oss-cn-qingdao.aliyuncs.com
    'ossServerInternal' => 'http://oss-cn-beijing-internal.aliyuncs.com', //青岛为 http://oss-cn-qingdao-internal.aliyuncs.com
    'AccessKeyId' => 'SEi7HOeAkFGAg2gl',
    'AccessKeySecret' => 'r7zdnBMjGwxqU90DDDlYqW3UT2AX9X',
JohnLui
2015-10-29 17:46
@骑车一公里:就是配置的问题,你再查查吧。
你用的版本是5么?Laravel 4 的话,会有多个 app.php 文件的。
你再看下前面有没有使用过 Config::set() 之类的。
骑车一公里
2015-10-29 17:59
@JohnLui:用的版本5,那我再查查吧
骑车一公里
2015-10-29 19:34
@JohnLui:执行php artisan config:cache后,tinker可以正确读出配置了。php artisan cache:clear都执行过了但是控制器里还是不行,是不是存在启用了某些缓存设置的可能?
骑车一公里
2015-10-30 10:00
@JohnLui:天了噜,重新下载了框架,把文件挪进去就没问题了。
是我的错
notech
2015-08-30 23:36
用你的封装,在 put object的时候 怎么设置content-type属性?
测试
2015-08-19 10:24
每次上传都要先上传到服务器 ,然后在从服务器上传都oss 。能直接上传到oss吗
JohnLui
2015-10-23 11:18
@测试:可以啊,阿里云提供了安卓和 iOS 的 SDK。iOS SDK:https://docs.aliyun.com/?spm=5176.383663.9.7.WhuzGU#/pub/oss/sdk/sdk-download&ios
fix丶ed
2015-08-14 13:59
您好,oss 图片删除和移动方法怎么实现呢?
JohnLui
2015-10-23 11:18
@fix丶ed:已经发布 1.3 版,加上了增加删除、复制、移动文件的功能
fix丶ed
2015-08-13 18:25
  OSS::bucket('1hooo')->move('temps/' . $tempImage->name, 'stores/' . $tempImage->name);
有没有移动和 删除方法? 比如我有多个bucket  能有方法进入某个buchket不?????
xiaoyin199
2015-07-30 09:28
return $oss->ossClient->getUrl($ossKey, new \DateTime("+1 day")); 这里获取回来的图片有个过期时间,而且这个参数必须填写。我在富文本编辑器中应用了,例如百度编辑器图片上传,应用了oss图片存在云端了,但是返回的连接相当于有过期时间的,目前是一天。编辑器保存的可是具体的链接,所以一天后就失效了,怎么处理。
JohnLui
2015-07-30 17:01
@xiaoyin199:过期时间可以设置,你可以设置为 int 最大值,在 2037 年 ~
无名
2015-07-22 14:12
laravel5.1的怎么使用 方法一样吗
JohnLui
2015-07-22 14:18
@无名:一样
小女子
2015-07-06 11:10
你好,请教一下,这个在CI。3 里面怎么使用呢?
CI。3 不支持命名空间?
JohnLui
2015-07-06 11:12
@小女子:是支持的, 直接引入包就行。
小寒
2015-06-27 16:29
我改了OSSUtils类的
    public static function buildResourcePath($key) {
        return empty($key) ? '/' : '/'.$key;
    }
这个方法,把$key的url序列化去了,上传的$key可以指定目录了。当然,services里面的oss,的上传路径最好是检查下是否为绝对路径,如果是绝对路径把前面的'/'去了,因为这方法里面会自动增加。
Frank
2015-06-23 10:35
hi,有个疑惑问下
看了下这个包的实现,oss/src/Aliyun目录下的源文件中,显示的是
2       /**
3     * Copyright (C) Alibaba Cloud Computing
4     * All rights reserved.
5     *
6     * 版权所有 (C)阿里云计算有限公司
7     */
但是翻了下官方文档  http://docs.aliyun.com/?spm=5176.383663.9.2.Wdtb0x#/pub/oss/sdk/sdk-download&php
提供的sdk与 johnlui/AliyunOSS 中封装的方式完全不一样呀

oss/src/Aliyun下的源文件是自己开发的还是 从哪里Get到的?

多谢:)

2015-07-27 15:11
@Frank:hi,
@JohnLui
你好,我也有相同的疑问

想知道你的源文件是从哪里Get到的?

多谢:)
JohnLui
2015-10-23 11:20
@二:是之前阿里云分发的 v2 版的 SDK。
JohnLui
2015-10-23 11:19
@Frank:是之前阿里云分发的 v2 版的 SDK。
Tester
2015-06-03 13:14
报错:
The specified bucket is not valid.

所有参数都没问题,bucket名称也100%没写错,因为是复制过去的
JohnLui
2015-06-03 13:21
@Tester:可能是key的问题?
Tester
2015-06-03 13:26
@JohnLui:肯定不是,我又创建了新的key 也不行
Tester
2015-06-03 13:29
@JohnLui:报错地址:
OSSException in OSSExceptionFactory.php line 16:
The specified bucket is not valid.
JohnLui
2015-06-03 13:32
@Tester:那就不知道了,要不你试一下 v1 版的 SDK,看可不可以。
Tester
2015-06-03 13:39
@JohnLui:抱歉,刚才去调试了一下,发现我在配置文件里面的配置 直接就写成http://bucket_name.oss-cn-shenzhen.aliyuncs.com了,然后在调用的时候 再写一次bucket_name , 地址就成了 bucket_name.bucket_name.oss-cn-shenzhen.aliyuncs.com

谢谢,省了我不少时间
温柔的大海
2015-05-22 10:18
在laravel5下报错array_first找不到
JohnLui
2015-05-22 11:32
@温柔的大海:这个项目里没有 array_first 这串字符

发表评论:

© 2011-2019 岁寒  |  Powered by Emlog