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

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

评论:

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 这串字符
smilezoo
2015-05-13 18:01
Notice: Undefined index: host in /Users/sluin/Downloads/AliyunOSS-master/oss/src/Aliyun/OSS/Utilities/OSSUtils.php on line 110
PHP Fatal error:  Uncaught exception 'InvalidArgumentException' with message 'The scheme of endpoint is not set.' in /Users/sluin/Downloads/AliyunOSS-master/oss/src/Aliyun/Common/Communication/HttpRequest.php:76


code:

<?php
require_once('./OSS.php');
    OSS::upload('zheshiyigetest', '/Users/sluin/Downloads/AliyunOSS-master/test.png');
?>

报错看不太懂....不知道怎么修改
JohnLui
2015-05-13 18:35
@smilezoo:目测配置错误
smilezoo
2015-05-14 15:54
@JohnLui:问题解决了 ,有个小问题 , 设置了时区 ,不然还是会报错 . date_default_timezone_set('Asia/Shanghai');
问题所在是因为粗心 ,地址前面没有加 http://   另外在文件前面 引入其他文件 就不会报错了 .
JohnLui
2015-05-14 16:02
@smilezoo:设置时区是框架要干的事
smilezoo
2015-05-13 11:49
hi , 我刚刚开始学php可能提的问题有些傻 .

example中  use JohnLui\AliyunOSS\AliyunOSS; 这里  是两个AliyunOSS 吗 ?  我在另一个文件中只看到 namespace了一个JohnLui\AliyunOSS .
另外 , 刚学我都没有科普,不知道怎么用框架, 是不是要自己写一个Config类 ? 因为没有找到这个在哪里声明过 .谢谢了 .
JohnLui
2015-05-13 12:22
@smilezoo:你需要看一下我的 PHP 命名空间 解惑 ~
laravel
2015-05-07 10:36
laravel分页报错:ErrorException in compiled.php line 5144: call_user_func_array() expects parameter 1 to be a valid callback, class 'Illuminate\Support\Collection' does not have a method 'links' (View: D:\learnlaravel5\resources\views\Admin\Ljd\index.blade.php)
JohnLui
2015-05-07 11:05
@laravel:天地良心,这错误跟这个包真没关系
laravel
2015-05-07 11:06
@JohnLui:那我怎么分页呢
阿旭
2015-02-11 21:13
{"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","me
ssage":"Class 'Aliyun\\OSS\\OSSClient' not found","file":"E:\\work\\php\\Apache2
4\\htdocs\\shop\\app\\controllers\\OSS.php","line":13}}


我也查看了vendor/composer
/vendor/composer/autoload_psr4.php 中有 'JohnLui\\AliyunOSS\\' => array($vendorDir . '/johnlui/aliyun-oss'), 这样行
JohnLui
2015-02-12 19:40
@阿旭:是 symfony 还是 Laravel ?
呆子
2015-02-09 15:39
搞定了,改了很多地方,但是我没时间去确定到底是哪里出了问题。
等搞定功能了,再去最后确定是哪里的配置问题。
阿旭
2015-02-11 21:14
@呆子:你好我也遇到类似的问题,不知道什么原因,能帮帮我吗?
呆子
2015-02-06 09:14
你好,不知道为什么,symfony中作为vendor总是添加不进去。
1. config.json 中我添加了require和classmap
2. 执行了composer update 和 composer dump-autoload
3. 之后查看了配置文件,信息都是正确的。

但是总是提示":Class 'JohnLui\AliyunOSS\AliyunOSS' not found
JohnLui
2015-02-06 10:45
@呆子:应该就是包安装的问题。你看看 /vendor/composer/autoload_psr4.php 中是否有 'JohnLui\\AliyunOSS\\' => array($vendorDir . '/johnlui/aliyun-oss'), 这样一行?
呆子
2015-02-06 19:39
@JohnLui:这一行确实没有,我手动添加后,仍然有错误,错误信息变为:
Cannot redeclare class JohnLui\AliyunOSS\AliyunOSS
JohnLui
2015-02-09 12:39
@呆子:搞定了没。。。再搞不定的话我要装一个 symfony 试一下了。。。。
呆子
2015-02-09 16:05
@JohnLui:之所以用 symfony是因为用edusoho这个开源的在线教育平台,在后台直接把视频上传到阿里云OSS上去。不存储在本地,也不使用官方的云服务。
AlleSong
2018-01-05 11:37
@JohnLui:请问下这个问题怎么解决啊?我也发生了同样的问题。
JohnLui
2018-01-05 13:53
@AlleSong:经过我的测试,Symfony 完全没问题,可以使用,只是需要修改几处命名空间。稍后我会修改 readme 加入 symfony 用法。建议先理解命名空间,不然以后寸步难行,具体可以参考本站文章。

发表评论:

© 2011-2020 岁寒  |  Powered by Emlog