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

    ___     __    _                                    ____    _____   _____
   /   |   / /   (_)   __  __  __  __   ____          / __ \  / ___/  / ___/
  / /| |  / /   / /   / / / / / / / /  / __ \        / / / /  \__ \   \__ \
 / ___ | / /   / /   / /_/ / / /_/ /  / / / /       / /_/ /  ___/ /  ___/ /
/_/  |_|/_/   /_/    \__, /  \__,_/  /_/ /_/        \____/  /____/  /____/
                    /____/

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
2015.1.9   /   热度:14644   /   分类: PHP

评论:

董咚懂咚
2017-03-29 18:47
OSS::getAllObjectKey($bucketName);
只读取了100条数据,怎样全部读取呢?
拉风的男人
2017-03-21 13:32
表单有必要用组件么
MikuSama
2017-03-14 11:33
博主你好,不知道这个能不能应用在chevereto这个图床程序上,因为那个程序是国外的,支持的上传方式只有AWS S3,Google Cloud,还有SFTP,STP(这两个都是要经过本地服务器,这样会极大的影响上传时间),所以我想用国内的oss。
Joey
2017-03-06 19:06
Token error   上传以后在阿里云服务器上显示。
MJIC
2017-02-08 19:34
在Lumen下使用报错
The request signature we calculated does not match the signature you provided. Check your key and signing method.

检查了半天,accesskeyid、accesskeysecret、bucket和endpoint都确认是没错的
不知道是哪里出了问题?
tairy
2017-01-11 23:02
为啥我用这个包上传到阿里云的图片做了cdn加速无法访问,我直接在阿里云的后台上传的图片是可以用cdn加速域名访问的。
JohnLui
2017-01-12 10:07
@tairy:因为设置为私有了?
tairy
2017-01-12 10:41
@JohnLui:感谢回复,找到原因了,是因为我上传的时候没有设置 content type 导致传到阿里云的图片的 content type 是默认的 application/octet-stream,在调用 upload 函数的时候加上 content type 就可以了。

```
OSS::upload($avatar, storage_path('app/' . $avatar), [
            'ContentType' => mime_content_type(storage_path('app/' . $avatar)),
            'ContentDisposition' => 'inline'
        ]);
```

另外楼主提供的示例中 https://github.com/johnlui/AliyunOSS/blob/master/OSSExample.php#L23 的 upload 函数并没有接受 option 参数的形参,传了参数 $option 数组之后虽然没有报错,但是上传的图片并没有设置contenttype, 后来自己手动加上之后才可以。
JohnLui
2017-03-08 21:25
@tairy:v2 发布了,大幅优化了 API 易用性,可以试试啦
tairy
2017-03-10 12:25
@JohnLui:好的,非常感谢!
Destiny
2016-12-26 11:45
博主你好,你的这个组件更新了之后,在 GitHub 上面的文档还没有更新呢,比如使用方法,我发现有一些维护中把一些如:设置 content-type 类型的方法也 pr 了但是使用方法文档却没有更新。
JohnLui
2016-12-26 11:55
@Destiny:感谢反馈~
欢迎贡献呦,在 Github 上就可以
Destiny
2016-12-26 21:10
@JohnLui:嗯,已更新。
Echo
2016-11-17 11:34
<?php

namespace App\Services;

use JohnLui\AliyunOSS\AliyunOSS;

use Config;

class OSS {

    private $ossClient;

    public function __construct($isInternal = false)
    {
        $serverAddress = $isInternal ? Config::get('app.ossServerInternal') : Config::get('app.ossServer');
        $this->ossClient = AliyunOSS::boot(
            $serverAddress,
            Config::get('app.AccessKeyId'),
            Config::get('app.AccessKeySecret')
        );
    }

use config显示undefined class config ,然后运行的话会报一下错误
InvalidArgumentException in AssertUtils.php line 55:
Key [Endpoint] was not set.
in AssertUtils.php line 55
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
at OSSClient->__construct(array('Endpoint' => null, 'AccessKeyId' => null, 'AccessKeySecret' => null)) in OSSClient.php line 54
at OSSClient::factory(array('Endpoint' => null, 'AccessKeyId' => null, 'AccessKeySecret' => null)) in AliyunOSS.php line 24
at AliyunOSS->__construct(null, null, null) in AliyunOSS.php line 29
at AliyunOSS::boot(null, null, null) in OSS.php line 20
JohnLui
2016-11-17 11:52
@Echo:去 Github 看看啦,这篇文章好久没更新了
HYB
2016-10-08 12:14
laravel 集成oss,删除文件 返回空, 结果没有删除。
oss::deleteObject();
deleteObject 这里面是访问路径还是上传路径?
寒素湘
2016-09-06 16:21
我怎么知道我上传文件是否成功呢?没有返回值和错误代码。

2016-10-25 18:52
@寒素湘:就是啊  没有返回错误
ginnerpeace
2016-08-30 16:10
您好,我请教一下。
目前1.3版本的包使用或者借鉴了官方的包了吗? aliyuncs/oss-sdk-php,如果有的话,是哪个版本呢?
罗彦
2016-07-29 00:24
作者你好我解决了,   在这里我给一些和我遇到问题的朋友解决一下,,,,遇到错误:The specified bucket is not valid.  的朋友   我在里我给你们解释一下 你们的内外地址肯定是给了http://****.oss-cn-beijing.aliyuncs.com 这里的*是指bucket名字,  然后你们调用方法的时候有传入了一个bucket的名字, 然后它给你们拼接起来 就变成了http://bucketName.bucketName.oss-cn..........com     解决方案:在配置文件里面ALIOSS_SERVER=http://oss-cn-beijing.aliyuncs.com   比如这个外网地址前面不要加上 bucket名字
回复
2016-11-03 11:44
@罗彦:好!
回复
2016-11-03 11:44
@罗彦:就是这个原因!太好了!
用户
2016-07-29 00:01
The specified bucket is not valid. 一直都是这个问题??????一点都没改动就的拉下来的, 配置都能读取到, 就是不行.:-(
用户
2016-07-28 23:01
作者你好, 请问我直接DD OSS类的构造方法里面的$ossClient, 我官输入正确的key还是错误的key返回数据里面的bucket 都是null请问这是咋回事?怎么验证我是否成功连接了OSS
supermanrocky
2016-07-10 21:36
请问怎么获取bucket下的某个文件夹内容呢? OSS::getAllObjectKey('talentlib/icon') 这个会报错,不能输入/
JohnLui
2016-07-11 00:17
@supermanrocky:OSS 这类单文件云存储,是没有所谓“文件夹”的概念的,所有文件都有一个唯一的 key 作为名称才可以被检索。这里的文件夹只是个 trick,所以自然就没有所谓获取文件夹下所有文件的方法。这只是个工具包,在寻找某项功能之前请先去 OSS 官方 SDK 里找找有没有这条 api。
supermanrocky
2016-07-08 20:19
[curl] 7: Failed to connect to talentlib.oss-us-west-1-internal.aliyuncs.com port 80:Timed out [url] https://talentlib.oss-us-west-1-internal.aliyuncs.com/ipaustralia.pdf

请问这个问题是怎么解决呢?我的endpoint都设置好了。upload出的问题,getBucket没问题的。求教。我用的是laravel 5.2。多谢!
JohnLui
2016-07-08 21:01
@supermanrocky:应该是 OSS 那边的权限设置问题?
supermanrocky
2016-07-08 23:27
@JohnLui:我解决了,我是把$oss = new OSS(false); 改成false用外网传的。不知道为什么内网不能用?!~外网就能上传了。
JohnLui
2016-07-08 23:29
@supermanrocky:OSS内网ip可能需要白名单?
supermanrocky
2016-07-10 21:23
@JohnLui:请问这个能不能获取bucket下某个文件夹的内容?OSS::getAllObjectKey('talentlib/abc')这个会报错。不能在bucket后加/
孤狼
2016-06-16 18:05
这个 SDK, 支持创建目录吗?或者 再说上传文件是自动创建目录
j955
2016-05-23 17:01
ClientException in Command.php line 135:
The scheme of endpoint is not set.

遇到了同样的问题,但外网地址什么的都设置了.dump出来查看也是有外网地址的.不知道什么原因望指教
阿德
2016-05-17 20:49
按照的自己的情况重新写了命名空间 之后提示安装curl 安装了curl 然后提示成功! 哈哈 谢谢老大的扩展包
阿德
2016-05-17 18:36
忘了说 我的laravel5.2.29

发表评论:

© 2011-2017 岁寒  |  Powered by Emlog