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

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

评论:

大伟
2018-08-01 14:26
站长,你好,OSS的删除方法没有返回值,那么我该如何判断删除成功了呢

2018-07-03 13:37
总是报错 请求超时    请求时间大于30s
xfwang
2018-07-02 20:14
大神好,我调用AliyunOSS.php里面的getObjectMeta方法想获取文件的基本信息,但是一直返回The specified key does not exist

这个是什么原因呀,用AliyunOSS.php里面的getUrl方法都能正常获取到图片下载地址呢,求解答呀
komavenn
2018-06-19 13:34
转为二进制图片上传还是报这个错误
晨晨
2018-06-01 11:10
"Too few arguments to function JohnLui\AliyunOSS::boot(), 3 passed in /home/wwwroot/dev.api.miyin.com/app/services/OSS.php on line 25 and exactly 5 expected"
Symfony\Component\Debug\Exception\FatalThrowableError
/vendor/johnlui/aliyun-oss/src/AliyunOSS.php86
86行内容是    public static function boot($city, $networkType, $isInternal, $AccessKeyId, $AccessKeySecret)
  
请问 在app/services/oss.php文件   从您Git上粘贴下来  还有要修改的地方吗?

vendor下的包里 vendor/johnlui/aliyun-oss/src/AliyunOSS.php里还有要  改的地方吗
JohnLui
2018-06-01 11:32
@晨晨:你确定你是粘下来的? https://github.com/johnlui/AliyunOSS/blob/master/example/OSS.php  这个文件第 25 行是空格。
晨晨
2018-05-31 18:56
您好 我 有两个问题
1 . require: "johnlui/aliyun-oss": "~2.0"以后,再composer update , vendor 里并没有aliyun-oss这个文件 夹是正常吗?

新建了app/services/OSS.php文件后,就报错了 说找不到文件中use JohnLui\AliyunOSS\AliyunOSS; 这个类
梦里是谁
2018-05-29 10:57
上传图片没有指定Content-type,导致访问的时候变成自动下载了。于是我修改app/services/oss.php中的upload如下:
public static function upload($ossKey, $filePath)
    {
        $oss = new OSS(self::$internal); // 上传文件使用内网,免流量费
        $oss->ossClient->setBucket(config('alioss.BucketName'));
        $res = $oss->ossClient->uploadFile($ossKey, $filePath, ['ContentType' => mime_content_type($filePath)]);
        return $res;
    }
郭启才
2018-05-07 13:49
大神请教下如何实现大文件上传,我现在用的的是publicDeleteObject这个方法,可是上传大文件服务器就受不了老是报错,我该怎么做求职点
jackysong
2018-03-30 20:04
作者您好!我想请问一下,这个可以将数据存入阿里云以外的类s3 oss中吗?比如我想将数据存入minio中。应该如何修改代码?
melo
2018-03-23 14:45
阿里云的oss是可以创建文件夹的

如何把上传的文件放入指定的文件夹中呢
郭启才
2018-05-07 13:54
@melo:用这段代码就可以了
   //oss容器名称
         $bucket = '*******';
        //oss文件名称
        $object = time().rand(100000,999999).'.mp4';
        //获取文件路径
        $file = $request->file('video');
        $path = $file->getRealPath();
        //获取文件大小
        $size = $file->getClientSize();
        //换算成MB
        $size = $size / 1048576;
        if($size > 2500){
            return back()->with('error','文件过大');
        }
        
        $retuest = OSS::publicUpload($bucket,$object,$path);
李斌
2018-03-16 15:54
在OSS控制台设置了自定义的域名:honsenflagstorage.honsenflag.com
并重写了AliyunOSS


    public function __construct($city, $networkType, $isInternal, $AccessKeyId, $AccessKeySecret)
    {
        $this->city = $city;
        $this->networkType = $networkType;
        $serverAddress = env('ServerAdd'); //在.env文件中定义的为http://honsenflag.com

        $this->ossClient = OSSClient::factory([
            OSSOptions::ENDPOINT => $serverAddress,
            'AccessKeyId'  => $AccessKeyId,
            'AccessKeySecret' => $AccessKeySecret,
        ]);
    }

然后在使用的时候报下面的错误是什么原因啊???
ClientException in HttpServiceClient.php line 93:
[curl] 6: Could not resolve host: honsenflagstorage.honsenflag.com; Unknown error [url] http://honsenflagstorage.honsenflag.com/
郭启才
2018-03-09 19:58
玩什么创建不了bucket这个容器
郭启才
2018-03-08 18:10
大神这个上传的流程是什么样的必须要先从客户端上传到服务器然后在上传到oss吗。能不能直接从客户端上传到oss?求指教
JohnLui
2018-03-08 18:18
@郭启才:阿里云也提供移动端 SDK。建议你去好好读一下阿里云对 OSS 的介绍,里面啥都有。
郭启才
2018-03-07 16:45
大神我的PHP版本7.0的装不进去怎么办啊
JohnLui
2018-03-07 17:00
@郭启才:是你 Laravel 本身的问题。这个库没有任何第三方依赖。
大包子
2018-01-29 18:04
为什么上传之后,给我返回的不是路径啊,这个我怎么上传到数据库啊。。。。
JohnLui
2018-01-29 18:15
@大包子:文件名是上传的时候定义的,URL 直接拼 域名+文件名 就行了。
493019642
2018-02-01 19:20
@JohnLui:@JohnLui ,大神,有没有PHP做后台服务器给APP段返回sts凭证demo?
请问
2018-02-06 11:27
@493019642:回来回复一下。自己写了。
天赐
2018-01-11 18:17
可以直接输出cdn域名的的url吗
JohnLui
2018-01-12 10:15
@天赐:直接用 OSS 域名是可以的,如果要上 CDN 需要在阿里云那里关联 CDN 和 OSS,设置了之后都是 OK 的。其实 OSS 的服务器就挺快的。
小飞侠
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 出错,目测本地路径的问题
levent
2018-01-11 18:15
@JohnLui:文件大于3M 就出这样的错误。1M 以下的都没问题~
梦醒
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);
返回成功还是失败怎么判断啊?

发表评论:

© 2011-2018 岁寒  |  Powered by Emlog