优雅的 Oss Flysystem 扩展

2019-01-04 09:42:32 +08:00
 oops1900

先上链接

如果觉得帮助了你,节省了你的时间记得 Star 哟.

序言

大佬们小弟第一次发帖体谅体谅嘿嘿

之前用过很多 oss 扩展包但是暂时没有一个用的顺心的,一些扩展包配置太复杂,还有的扩展包不能集成 Laravel 文件驱动,对于喜欢优雅编码的同学可能不能忍受

最近闲下来看了一些优秀的开源项目,从中学到不少东西。然后决定自己也写一个 oss 扩展包.

要求

第一个扩展包:直接使用不依赖框架

$ composer require "iidestiny/flysystem-oss" -vvv

配置

use League\Flysystem\Filesystem;
use Iidestiny\Flysystem\Oss\OssAdapter;
use Iidestiny\Flysystem\Oss\Plugins\FileUrl;

$accessKeyId = 'xxxxxx';
$accessKeySecret = 'xxxxxx';
$endpoint= 'oss.iidestiny.com';
$bucket = 'bucket';
$isCName = true; // 如果 isCname 为 false,endpoint 应配置 oss 提供的域名如:`oss-cn-beijing.aliyuncs.com`,cname 或 cdn 请自行到阿里 oss 后台配置并绑定 bucket

$adapter = new OssAdapter($accessKeyId, $accessKeySecret, $endpoint, $bucket, $isCName);

$flysystem = new Filesystem($adapter);

API

bool $flysystem->write('file.md', 'contents');

bool $flysystem->write('file.md', 'http://httpbin.org/robots.txt', ['options' => ['xxxxx' => 'application/redirect302']]);

bool $flysystem->writeStream('file.md', fopen('path/to/your/local/file.jpg', 'r'));

bool $flysystem->update('file.md', 'new contents');

bool $flysystem->updateStream('file.md', fopen('path/to/your/local/file.jpg', 'r'));

bool $flysystem->rename('foo.md', 'bar.md');

bool $flysystem->copy('foo.md', 'foo2.md');

bool $flysystem->delete('file.md');

bool $flysystem->has('file.md');

string|false $flysystem->read('file.md');

array $flysystem->listContents();

array $flysystem->getMetadata('file.md');

int $flysystem->getSize('file.md');

string $flysystem->getAdapter()->getUrl('file.md'); 

string $flysystem->getMimetype('file.md');

int $flysystem->getTimestamp('file.md');

Plugins

use Iidestiny\Flysystem\Oss\Plugins\FileUrl

$flysystem->addPlugin(new FileUrl());

string $flysystem->getUrl('file.md');

第二个扩展包:专门为 Laravel 适配

该扩展包内部自动依赖了 iidestiny/flysystem-oss 所以两个包不需要重复安装,Laravel 用户直接使用下面这条语句安装就可以.

$ composer require "iidestiny/laravel-filesystem-oss" -vvv

配置

config/filesystems.php 添加 oss 配置

<?php

return [
   'disks' => [
        //...
        'oss' => [
            'driver' => 'oss',
            'access_key' => env('OSS_ACCESS_KEY'),
            'secret_key' => env('OSS_SECRET_KEY'),
            'endpoint'   => env('OSS_ENDPOINT'),
            'bucket'     => env('OSS_BUCKET'),
            'isCName'    => env('OSS_IS_CNAME', false), // 如果 isCname 为 false,endpoint 应配置 oss 提供的域名如:`oss-cn-beijing.aliyuncs.com`,否则为自定义域名,,cname 或 cdn 请自行到阿里 oss 后台配置并绑定 bucket
        ],
        //...
    ]
];

使用

<?php

$disk = Storage::disk('oss');

// create a file
$disk->put('avatars/filename.jpg', $fileContents);

// check if a file exists
$exists = $disk->has('file.jpg');

// get timestamp
$time = $disk->lastModified('file1.jpg');
$time = $disk->getTimestamp('file1.jpg');

// copy a file
$disk->copy('old/file1.jpg', 'new/file1.jpg');

// move a file
$disk->move('old/file1.jpg', 'new/file1.jpg');

// get file contents
$contents = $disk->read('folder/my_file.txt');

// get file url
$url = $disk->getUrl('folder/my_file.txt');

更多方法查看 Laravel 文档 laravel-filesystem-doc

扩展包开发参考

3028 次点击
所在节点    PHP
5 条回复
qbhy
2019-01-04 14:28:26 +08:00
flysystem 是不是用了感觉会飞的意思 /手动滑稽
oops1900
2019-01-04 23:29:53 +08:00
@qbhy 哈哈,应该是的。起飞
lepig
2019-01-15 14:45:57 +08:00
支持一波大佬 总算有好用的 oss 扩展了
oops1900
2019-01-16 09:02:59 +08:00
@lepig 谢谢支付,如果觉得好用 star 一波,并推荐给朋友。嘿嘿
oops1900
2019-01-16 09:03:47 +08:00
@lepig 谢谢支持。。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/523720

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX