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

2015-1-9   /   阅读数:18644   /   分类: 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

评论:

小飞侠
2017-12-04 16:43
您好,这个2.0 AliyunOss里面缺少getObject()方法;导致实例$ossClient调用该方法出错。
JohnLui
2017-12-04 17:02
@小飞侠:2.0 和 1.0 API 不兼容,需要更新调用代码
342342
2017-11-30 10:57
ErrorException in AliyunOSS.php line 99: fopen(uploads): failed to open stream: Permission denied
配置好后报的权限问题,这是怎么回事
JohnLui
2017-11-30 11:18
@342342:fopen 出错,目测本地路径的问题
梦醒
2017-11-11 23:07
成功上传之后返回结果:object(Aliyun\OSS\Models\PutObjectResult)#633 (1) {
  ["eTag":"Aliyun\OSS\Models\PutObjectResult":private]=>
  string(32) "D41D8CD98F00B204E9800998ECF8427E"
}
梦醒
2017-11-11 22:47
你好 请问调用 $res = OSS::publicUploadContent($this->bucket, $name, $response);
返回成功还是失败怎么判断啊?
shiba
2017-10-23 12:19
laravel 5.5 不支持   找不到命名空间
JohnLui
2017-10-23 12:24
@shiba:保证 Laravel 10000 都支持。报错了就去解决它呀。
keweila
2017-10-15 22:31
有下载吗
嗷嗷
2017-09-09 15:13
大文件分片上传的没有,还是没找到。。。
暗影
2017-09-07 18:16
老师您好:
我这边接收到的图片是base64的格式,我看到有一个方法publicUploadContent这个是可以用来上传文件变量内容的,但是会给我返回一个错误:The specified object is not valid.
请问这是什么意思
JohnLui
2017-09-08 10:19
@暗影:应该先用 PHP 转成二进制的格式,再上传。这时候至于是直接传变量的值还是写成本地文件再上传就随意啦,建议写成本地文件,这样 OSS 挂掉的关键时刻可以用自己服务器顶上。
Thanos
2017-08-31 14:13
我是5.1的版本,安装包的时候出现  - laravel/laravel v5.2.15 requires laravel/framework 5.2.* -> satisfiable by laravel/framework[5.2.41, 5.2.x-dev, v5.2.0, v5.2.0-beta1, v5.2.1, v5.2.10, v5.2.11, v5.2.12, v5.2.13, v5.2.14, v5.2.15, v5.2.16, v5.2.17, v5.2.18, v5.2.19, v5.2.2, v5.2.20, v5.2.21, v5.2.22, v5.2.23, v5.2.24, v5.2.25, v5.2.26, v5.2.27, v5.2.28, v5.2.29, v5.2.3, v5.2.30, v5.2.31, v5.2.32, v5.2.33, v5.2.34, v5.2.35, v5.2.36, v5.2.37, v5.2.38, v5.2.39, v5.2.4, v5.2.40, v5.2.42, v5.2.43, v5.2.44, v5.2.45, v5.2.5, v5.2.6, v5.2.7, v5.2.8, v5.2.9] but these conflict with your requirements or minimum-stability.
    - laravel/laravel v5.2.0 requires laravel/framework 5.2.* -> satisfiable by laravel/framework[5.2.41, 5.2.x-dev, v5.2.0, v5.2.0-beta1, v5.2.1, v5.2.10, v5.2.11, v5.2.12, v5.2.13, v5.2.14, v5.2.15, v5.2.16, v5.2.17, v5.2.18, v5.2.19, v5.2.2, v5.2.20, v5.2.21, v5.2.22, v5.2.23, v5.2.24, v5.2.25, v5.2.26, v5.2.27, v5.2.28, v5.2.29, v5.2.3, v5.2.30, v5.2.31, v5.2.32, v5.2.33, v5.2.34, v5.2.35, v5.2.36, v5.2.37, v5.2.38, v5.2.39, v5.2.4, v5.2.40, v5.2.42, v5.2.43, v5.2.44, v5.2.45, v5.2.5, v5.2.6, v5.2.7, v5.2.8, v5.2.9] but these conflict with your requirements or minimum-stability.
    - Installation request for laravel/laravel No version set (parsed as 1.0.0) -> satisfiable by laravel/laravel[No version set (parsed as 1.0.0)].
    - overtrue/laravel-follow 1.0 requires laravel/laravel ^5.1 -> satisfiable by laravel/laravel[v5.1.0, v5.1.1, v5.1.11, v5.1.3, v5.1.33, v5.1.4, v5.2.0, v5.2.15, v5.2.23, v5.2.24, v5.2.27, v5.2.29, v5.2.31, v5.3.0, v5.3.10, v5.3.16, v5.3.30, v5.4.0, v5.4.15, v5.4.16, v5.4.19, v5.4.21, v5.4.23, v5.4.3, v5.4.30, v5.4.9, v5.5.0].
    - Can only install one of: laravel/laravel[v5.1.0, No version set (parsed as 1.0.0)].
    - Can only install one of: laravel/laravel[v5.1.1, No version set (parsed as 1.0.0)].
    - Can only install one of: laravel/laravel[v5.1.11, No version set (parsed as 1.0.0)].
    - Can only install one of: laravel/laravel[v5.1.3, No version set (parsed as 1.0.0)].
    - Can only install one of: laravel/laravel[v5.1.33, No version set (parsed as 1.0.0)].
    - Can only install one of: laravel/laravel[v5.1.4, No version set (parsed as 1.0.0)].
    - Installation request for overtrue/laravel-follow 1.0 -> satisfiable by overtrue/laravel-follow[1.0].

是不支持5.1的吗?
赵山河
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:配置是内网,实际服务器不在阿里云上海区域?如果不在,只能使用公网配置。
James
2017-11-13 09:32
@JohnLui:我也是这个问题。区域是在同一个的
董咚懂咚
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   上传以后在阿里云服务器上显示。

发表评论:

© 2011-2017 岁寒  |  Powered by Emlog