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

评论:

赵山河
2017-07-27 19:15
这个本地地址怎么取,可以传电脑本地的文件吗
地球你好
2017-07-14 15:21
JohnLui你好,阿里云出新的SDK啦, 支持图片处理。
options = array(
    OssClient::OSS_PROCESS => "image/resize,m_lfit,h_100,w_100" );
$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "GET", $options);

JohnLui 老师啥时候更新一下
JohnLui
2017-07-14 15:23
@地球你好:你可以暂时两个都用嘛,用这个上传,用那个处理图片。。。
杰夫
2017-07-07 19:42
一个前端的疑惑。
当前我上传文件是前端ajax传递到控制器的(文件可能偏大),所以前端就有上传进度展示的需求了。

所以我的问题是:怎么去获取文件当前上传到OSS的进度呢?
狂野之心
2017-07-03 18:17
你好,我使用了johnlui/aliyun-oss 2.0
调用之后报
OSSException in OSSExceptionFactory.php line 16:
The specified object is not valid.

in OSSExceptionFactory.php line 16
at OSSExceptionFactory->createFromError(object(OSSError)) in OSSErrorResponseHandler.php line 29
at OSSErrorResponseHandler->handle(object(HttpResponse)) in OpenServiceClient.php line 40
at OpenServiceClient->sendRequest(object(HttpRequest), object(ExecutionContext)) in RetryableServiceClient.php line 32
at RetryableServiceClient->sendRequestImpl(object(HttpRequest), object(ExecutionContext), 0) in RetryableServiceClient.php line 27
at RetryableServiceClient->sendRequest(object(HttpRequest), object(ExecutionContext)) in Command.php line 121
at Command->execute(array('Endpoint' => 'http://oss-cn-qingdao.aliyuncs.com', 'AccessKeyId' => 'xxx', 'AccessKeySecret' => 'xxx'), array('Bucket' => 'xxx', 'Key' => '/ld/dn/1/2017-07-03/ceb8f4d00356cf6b27da38827bc0e784.jpg', 'Content' => resource, 'ContentLength' => 30225)) in OSSClient.php line 429
at OSSClient->execute('putObject', array('Bucket' => 'xxx', 'Key' => '/ld/dn/1/2017-07-03/ceb8f4d00356cf6b27da38827bc0e784.jpg', 'Content' => resource, 'ContentLength' => 30225)) in OSSClient.php line 153
at OSSClient->putObject(array('Bucket' => 'xxx', 'Key' => '/ld/dn/1/2017-07-03/ceb8f4d00356cf6b27da38827bc0e784.jpg', 'Content' => resource, 'ContentLength' => 30225)) in AliyunOSS.php line 105
at AliyunOSS->uploadFile('/ld/dn/1/2017-07-03/ceb8f4d00356cf6b27da38827bc0e784.jpg', 'E:\\Visual-NMP-x64\\tmp\\php25B1.tmp', array()) in OSSRepository.php line 53
at OSS::publicUpload('xxx', '/ld/dn/1/2017-07-03/ceb8f4d00356cf6b27da38827bc0e784.jpg', 'E:\\Visual-NMP-x64\\tmp\\php25B1.tmp') in UploaderController.php line 52

该如何解决呢。。。
JohnLui
2017-07-04 10:39
@狂野之心:"The specified object is not valid."

just translate it
0202
2017-06-29 14:48
设置了自定义域名之后好像不能上传  
The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
JohnLui
2017-06-29 15:00
@0202:自定义域名这是用于访问的呀。。。上传当然要用它提供的域名。。。
0202
2017-06-29 15:29
@JohnLui:不好意思  是测试环境是存储区域跟之前不一样了~~
JohnLui
2017-06-29 15:31
@0202:不过还是建议用它提供的域名,DNS解析也是需要时间的。。。
火鸡2017
2017-06-23 15:45
有MD5验证上传吗,找不到到相关参数设置;
chengzige
2017-06-13 21:17
上传的时候提示
ClientException in HttpServiceClient.php line 93:
[curl] 7: Failed to connect to chengzige.oss-cn-shanghai-internal.aliyuncs.com port 80: Timed out [url] http://chengzige.oss-cn-shanghai-internal.aliyuncs.com/79Z1qv3WdG.jpg

这是怎么回事啊
JohnLui
2017-06-14 11:48
@chengzige:配置是内网,实际服务器不在阿里云上海区域?如果不在,只能使用公网配置。
董咚懂咚
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. 一直都是这个问题??????一点都没改动就的拉下来的, 配置都能读取到, 就是不行.:-(

发表评论:

© 2011-2017 岁寒  |  Powered by Emlog