文档章节

Laravel5.2之Filesystem-从Dropbox中下载文件到AWS S3

botkenni
 botkenni
发布于 2016/10/24 09:32
字数 1140
阅读 27
收藏 0

 

说明:本文主要讲述了Laravel的文件系统Filesystem的小Demo,逻辑不复杂,主要就是把Dropbox上的一个文件下载到本地local,和下载到AWS S3中。用到的文件库filesystem主要是:league/flysystem,Laravel中的illuminate/filesystem模块也仅仅是对该库做了一个简单的封装。这个小Demo作为小练习玩玩,了解下Laravel的Filesystem。

备注:开发环境为Laravel5.2+MySQL5.7+PHP7,该环境也是公司项目环境,使用起来还不错。Dropbox是个类似百度云的存储软件,AWS S3是个类似阿里云RDS的云数据库。

安装Dropbox Adapter和AWS Adapter

league/flysystem官网上已经提供了两个Adapter的安装了:Aws S3 Adapter - SDK V3Dropbox Adapter,Artisan命令为:

composer require league/flysystem-aws-s3-v3
composer require league/flysystem-dropbox

该两个适配器又依赖于对应的两个SDK包,所以会同时安装好Dropbox和AWS的SDK包。关于Adapter的概念可以查看官网:Core Concepts,上面的文档是个好东西,值得研究研究。

Dropbox和AWS S3配置

Dropbox去Create Apps上新建个APP,然后拿到APP_SECRET和临时的token:

同样的,在AWS S3中新建一个Bucket后,拿到Key和Secret:

然后在配置文件中config/filesystem.php中写上磁盘配置:

'disks' => [

        'local' => [
            'driver' => 'local',
            'root'   => storage_path('app'),
        ],

        'public' => [
            'driver'     => 'local',
            'root'       => storage_path('app/public'),
            'visibility' => 'public',
        ],

        's3' => [
            'driver' => 's3',
            'key'    => env('S3_KEY'),
            'secret' => env('S3_SECRET'),
            'region' => env('S3_REGION'),
            'bucket' => env('S3_BUCKET'),
        ],

        'dropbox' => [
            'driver'       => 'dropbox',
            'access_token' => env('DROPBOX_TOKEN'),
            'app_secret'   => env('DROPBOX_SECRET'),
        ],

    ],

同时,在.env文件中写上对应具体指。AWS S3中S3_REGION指该S3位置,我的是东京区,就是ap-northeast-1,同时新建的S3_BUCKET名称是myrightcapitals3。

写Dropbox驱动

由于illuminate/filesystem没有dropbox驱动,需要自定义下:

php artisan make:provider DropboxProvider

在boot()中写上名为dropbox的驱动:

Storage::extend('dropbox', function($app, $config) {
            $client = new DropboxClient($config['access_token'], $config['app_secret']);
            return new Filesystem(new DropboxAdapter($client));
        });

同时在config/app.php注册下该DropboxProvider就行。

写Artisan命令

php artisan make:console FileSystem/Dropbox --command=filesystem:dropbox

写上命令的处理逻辑,很简单的几个函数调用,不详述了:

namespace App\Console\Commands\FileSystem;

use Illuminate\Console\Command;
use Storage;

class Dropbox extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'filesystem:dropbox';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Download data from dropbox to local and aws s3';

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $content = Storage::disk('dropbox')->get('/AWS/myrightcapital.pem');

        if (Storage::disk('public')->put('myrightcapital.pem', $content)) {
            $this->info('Local download success.');
        } else {
            $this->info('Local download fail.');
        }

        if (Storage::disk('s3')->put('/AWS/myrightcapital.pem', $content)) {
            $this->info('S3 download success.');
        } else {
            $this->error('S3 download fail');
        }
    }
}

执行命令php artisan filesystem:dropbox后,本地storage/app/public文件夹下就会下载一个myrightcapital.pem文件,同时AWS S3上对应的Bucket里也下载了该文件。
执行命令后,显示:

Dropbox上origin文件myrightcapital.pem:

从Dropbox上下载到AWS S3上的myrightcapital.pem文件:

It is working

该demo逻辑简单,但很好玩。

One more thing

推荐一些我司在使用的支持敏捷开发软件,很多东西挺自动化的,真的是DevOps开发运维自动化啊,有兴趣的可以了解了解。首推Atlassian全家桶:Git管理软件SourceTree(可以连Bitbucket、Github和Gitlab,Client APP的),Bitbucket代码存储库(类似Gitlab,搭建自己的私有库,WEB的),JIRA(项目管理工具,WEB的),Confluence(强大的项目文档工具,WEB的),和Bamboo(自动build和deploy平台,WEB的),Hipchat(强大的聊天和通知工具,QQ可不是适合工作中用的哦),这些软件非常不错,但最牛逼的是这些软件是可以相互集成的,如一个issue通过SourceTree的一次commit+push,Bamboo会自动build和deploy代码至服务器,并且Hipchat收到push和deploy信息,用起来会非常爽。还有日志收集工具Logentry和错误通知工具Sentry,尤其Sentry对于收集Laravel程序的错误异常也很清晰,还有Runscope针对API测试和监测的软件,这个大神器,实时监控线上API,有任何异常错误,Sentry会发邮通知我的啊,哈哈。提高生产力,生产工具很重要,不是靠堆人堆出来的啊

贴下平时工作中Hipchat收到的通知日常(QQ真的不是在工作中用的软件啊),代码push/build/deploy都会收到通知,还可以跳转到JIRA中或Bamboo中查看具体issue信息等等功能,是个团队协作利器,推荐下:

总结:本文主要利用一个小demo了解下Laravel的Filesystem,实际上league/flysystem包和illuminate/filesystem包源码也值得研究研究玩一玩。

 

© 著作权归作者所有

共有 人打赏支持
botkenni
粉丝 20
博文 409
码字总数 434882
作品 0
西城
程序员
私信 提问
Laravel5.2之Filesystem源码解析(上)

说明:本文主要学习Laravel的Filesystem模块的源码逻辑,把自己的一点点研究心得分享出来,希望对别人有所帮助。总的来说,Filesystem模块的源码也比较简单,Laravel的IlluminateFilesystem模...

botkenni
2016/10/25
6
0
Laravel5.2之Filesystem源码解析(下)

说明:本文主要学习下LeagueFlysystem这个Filesystem Abstract Layer,学习下这个package的设计思想和编码技巧,把自己的一点点研究心得分享出来,希望对别人有帮助。实际上,这个Filesyste...

botkenni
2016/10/25
1
0
AWS亚马逊S3云储存怎么批量上传文件夹?用Python吧!

AWS S3 在浏览器没有拖动文件夹上传的功能,手动维护文件实在是太过辛苦了,用Python API吧! AWS S3 才是当今世界上最大的云存储。虽然 S3 服务的对象多为企业用户,你同样可以使用它搭建个...

阿锋zxf
2018/05/16
0
0
NodeJS 文件系统模块--AnyFS

AnyFS是一个 NodeJS 的文件系统模块。提供一致的API,支持多种虚拟文件系统,支持插件扩展。 目前支持的文件系统如下: Dropbox AWS S3 FTP Memory 通过vinyl-fs插件,AnyFS可以与Gulp无缝集...

ddliu
2015/04/19
500
0
composer linux全局安装

我把它放在系统的PATH目录中,这样就能在全局访问它。 curl -sS https://getcomposer.org/installer | phpmv composer.phar /usr/local/bin/composer 注意:如果上诉命令因为权限执行失败, ...

刘晓强
2016/03/15
297
0

没有更多内容

加载失败,请刷新页面

加载更多

Scala实战:迁移文件

Scala作为script使用也是非常的方便。 原文地址:https://www.yangbajing.me/2019/03/22/scala实战:迁移文件/ 前因 最近因为线上文件越来越多,导致磁盘不够用。需要将磁盘上数据迁移到一块...

羊八井
18分钟前
0
0
vagrant

安装virtualbox、vagrant,重启电脑 创建目录vagrant_ubuntu1804,进入目录后 vagrant box add http://mirrors.ustc.edu.cn/ubuntu-cloud-images/bionic/20190312.1/bionic-server-cloudimg-......

chuqq
29分钟前
0
0
Java 多线程测试 笔记(一)

测试 没有Synchronized的并发 结果 用比较实际的方式测试,比如说卖东西,赚钱 public class Sell implements Runnable { static Sell sell = new Sell(); //商品总数 sta...

_大侠__
30分钟前
0
0
《大话数据结构》读后总结(四)

一、算法 1、算法效率的度量方法 1.1 事后统计方法 通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。该方法具有很大缺陷,不...

徐曙辉
54分钟前
3
0
Android 整体设计及背后意义

阿里妹导读:现实工作中经常可以听到这样的说法:框架的升级带来协议性能的提升、编程模式的变革带来业务的飞跃...... 姑且不论这些表述是否有问题,实际上如果系统地看待事物整体,可能会有...

阿里云云栖社区
56分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部