项目部署到生产环境,有两台lbs,文件上传后,如果命中一台没有文件的服务器,资源文件查询会显示404,可以做磁盘同步文件,laravel 中也有比较方便的做法,增加一个ftp上传配置,同理支持aws的s3和七牛云,可以将文件上传到远程服务。
1、简介
Laravel 基于 Frank de Jonge 开发的 PHP 包 Flysystem 提供了强大的文件系统抽象。Laravel 文件系统集成对使用驱动处理本地文件系统进行了简化,这些驱动包括Amazon S3,以及 Rackspace 云存储。此外,在这些存储选项间切换非常简单,因为对不同系统而言,API 是一致的。
2、配置
文件系统配置文件位于 config/filesystems.php
。在该文件中可以配置所有“磁盘”,每个磁盘描述了特定的存储驱动和存储位置。该配置文件为每种支持的驱动提供了示例配置,所以,简单编辑该配置来应用你的存储参数和认证信息即可。
当然,你想配置多少磁盘就配置多少,多个磁盘也可以共用同一个驱动。
公共磁盘
public
磁盘用于存储可以被公开访问的文件,默认情况下, public
磁盘使用 local
驱动并将文件存储在 storage/app/public
,要让这些文件可以通过web 访问到,需要创建一个软链 public/storage
指向 storage/app/public
,这种方式可以将公开访问的文件保存在一个可以很容易被不同部署环境共享的目录,在使用零停机时间部署系统如Envoyer 的时候尤其方便。
要创建这个软链,可以使用 Artisan 命令 storage:link
:
php artisan storage:link
文件被存储并且软链已经被创建的情况下,就可以使用辅助函数 asset
创建一个指向该文件的URL:
1
echo asset('storage/file.txt');
本地驱动
使用 local
驱动的时候,所有的文件操作都相对于定义在配置文件中的 root
目录,默认情况下,该值设置为 storage/app
目录,因此,下面的方法将会存储文件到storage/app/file.txt
:
Storage::disk('local')->put('file.txt', 'Contents');
FTP驱动配置
Laravel 的文件系统集成了 FTP 操作,不过,框架默认的配置文件 filesystems.php
并没有提供示例配置。如果你需要配置一个FTP文件系统,可以使用以下示例配置:
'ftp' => [
'driver' => 'ftp',
'host' => 'ftp.example.com',
'username' => 'your-username',
'password' => 'your-password',
// Optional FTP Settings...
// 'port' => 21,
// 'root' => '',
// 'passive' => true,
// 'ssl' => true,
// 'timeout' => 30,
],
//伪代码如下,在文件上传成功后 选择ftp方式配置,进行远程上传
$bool = Storage::disk('ftp')->put($filename, file_get_contents($realPath));