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

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

适配 Laravel 7 的新包已经发布:AliyunOSS-Laravel7

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

评论:

阿德
2016-05-17 20:49
按照的自己的情况重新写了命名空间 之后提示安装curl 安装了curl 然后提示成功! 哈哈 谢谢老大的扩展包
阿德
2016-05-17 18:36
忘了说 我的laravel5.2.29
阿德
2016-05-17 18:35
已经声明了 use App\Services\OSS;
还是提示 Class 'App\Services\OSS' not found...
JohnLui
2016-05-17 18:43
@阿德:目测是命名空间用法错误
阿德
2016-05-17 19:00
@JohnLui:那我重新复习下 命名空间 。。
SKY
2017-12-27 01:22
@阿德:你好,请问你的问题解决了吗?我也遇到了同样的问题,本地测试没问题,放到服务器就不行了
geta_chan
2016-05-10 17:16
哥,yii2怎么用啊
kailuo99
2016-03-21 23:33
你好:

我使用的是Laravel5.2 ,用了您的包以后,使用OSS出现

ClientException in Command.php line 135:
Undefined index: host

这个如何解决?
waken
2016-04-13 11:05
@kailuo99:你用的是内网访问
OSS.php总
$oss = new OSS(); // 上传文件使用内网,免流量费

这样定义就可以啦
Panfen
2016-04-18 14:55
@waken:你的意思是:$oss = new OSS(true) 改成 $oss = new OSS() ? 还是报同样的错
JohnLui
2016-04-18 15:15
@kailuo99:这个问题已经有了解决方案:https://github.com/johnlui/AliyunOSS/issues/9
Panfen
2016-04-18 15:18
@JohnLui:感谢您的及时回复,出现一个新的问题:OSSException in OSSExceptionFactory.php line 16:
AccessDenied,希望您能继续解答一下,form a laravel新手
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
@无名:一样

发表评论:

© 2011-2020 岁寒  |  Powered by Emlog