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

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

评论:

tigerx
2020-09-01 14:35
'Expires' => new \DateTime("+5 minutes")
过期时间是这么设置的么,为什么不生效呢
miralce
2020-08-28 17:23
在加载阿里云图片搜索服务时composer require alibabacloud/imagesearch-20200212 报错
Fatal error: Cannot declare class Symfony\Component\ClassLoader\UniversalClassLoader, because the name is already in use in /home/wwwroot/app/vendor/johnlui/aliyun-oss-laravel7/src/oss/libs/symfony/class-loader/Symfony/Component/ClassLoader/UniversalClassLoader.php on line 61

怎么避免引入文件冲突
puppet
2020-05-21 21:40
博主您好,OSS设置文件的Content-Type(MIME)是否有封装,或者文档说明?感谢
JohnLui
2020-05-22 09:53
@puppet:OSS::publicUpload('bucket', '目标 object 名', '本地文件路径', [
    'ContentType' => 'application/pdf',
    ... ...
]);

仔细看嘛,示例代码就是啊
lihn
2020-04-07 16:50
message: "Argument 1 passed to Symfony\Component\EventDispatcher\EventDispatcher::dispatch() must be an object, string given, called in E:\dahepaio\root\backstage\vendor\johnlui\aliyun-oss\src\oss\libs\guzzle\common\Guzzle\Common\AbstractHasDispatcher.php on line 40"

laravel版本 -- Laravel Framework 7.2.2
its
2020-06-24 15:09
@lihn:我也遇到了跟你同样的问题...
harriswong
2020-01-07 11:45
请问上传的时候怎么设置header呢?putObject方法的第四个参数 $options支持传入数组,我传入['Cache-Control'=>'max-age=1000']为何不生效呢?
M
2020-02-16 18:54
@harriswong:这个太老了,很多方法都没有,很久没更新了
嗷嗷嗷嗷
2019-09-30 09:43
请问 我用 getPublicObjectURL这个方法 传入bucket名称 和一个上传文件返回的ETAG 然后获取 文件访问URL  
返回结果 :"http://phpnb.oss-cn-hongkong.aliyuncs.com/89005FCCF6D9D2126A29CCFF9DAEAC52"
请问 大佬 我是上传的图片 怎么能让他直接显示啊?
小猪猪
2019-08-22 17:10
//oss容器名称
$bucket = '*******‘
我现在的情况是:
我的阿里oss  有一个bucket名为 blog,在blog下面有很多二级或三级目录
当我用这个插件把bucket设置为blog时,图片能正常上传到该目录下
但是我想把图片上传到二级目录,也就是blog/picture等
我试图把bucket名定义为 /blog/picture  运行的时候发现行不通
请帮帮忙~!
大屁孩
2019-03-14 16:49
您好 如何获取上传的时候错误信息呢 现在没有返回任何信息只有false 如何开启debug模式呢
kiki123
2019-01-28 15:04
如果判断文件是否已存在?oss官方方法doesObjectExist在这里似乎没有啊
xue
2019-04-09 15:17
@kiki123:大哥,你是怎么解决这个问题的?
大屁孩
2018-12-20 14:04
站长你好,
        如何获取视频文件的详细信息 这个接口是否有封装呢?
JohnLui
2018-12-20 14:06
@大屁孩:木有
大屁孩
2018-12-20 14:07
@JohnLui:好的谢谢
大伟
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);

发表评论:

© 2011-2020 岁寒  |  Powered by Emlog