Skip to content

文件存储

简介

Laravel 提供了强大的文件系统抽象,这要归功于 Frank de Jonge 出色的 Flysystem PHP 包。Laravel Flysystem 集成为本地文件系统、SFTP 和 Amazon S3 提供了简单的驱动程序。更好的是,在这些存储选项之间切换非常简单,因为每个系统的 API 保持不变。

配置

Laravel 的文件系统配置文件位于 config/filesystems.php。在此文件中,你可以配置所有文件系统「磁盘」。每个磁盘代表特定的存储驱动程序和存储位置。配置文件中包含每个支持驱动程序的示例配置,因此你可以修改配置以反映你的存储偏好和凭据。

local 驱动程序与运行 Laravel 应用程序的服务器上本地存储的文件交互,而 sftp 存储驱动程序用于基于 SSH 密钥的 FTP。s3 驱动程序用于写入 Amazon 的 S3 云存储服务。

NOTE

你可以根据需要配置任意数量的磁盘,甚至可以有多个使用相同驱动程序的磁盘。

本地驱动程序

使用 local 驱动程序时,所有文件操作都相对于 filesystems 配置文件中定义的 root 目录。默认情况下,此值设置为 storage/app/private 目录。因此,以下方法将写入 storage/app/private/example.txt

php
use Illuminate\Support\Facades\Storage;

Storage::disk('local')->put('example.txt', 'Contents');

公共磁盘

应用程序 filesystems 配置文件中包含的 public 磁盘用于将要公开访问的文件。默认情况下,public 磁盘使用 local 驱动程序并将其文件存储在 storage/app/public 中。

如果你的 public 磁盘使用 local 驱动程序并且你想让这些文件可以从 Web 访问,你应该创建一个从源目录 storage/app/public 到目标目录 public/storage 的符号链接:

要创建符号链接,你可以使用 storage:link Artisan 命令:

shell
php artisan storage:link

一旦文件被存储并创建了符号链接,你可以使用 asset 辅助函数创建指向文件的 URL:

php
echo asset('storage/file.txt');

你可以在 filesystems 配置文件中配置额外的符号链接。当你运行 storage:link 命令时,每个配置的链接都将被创建:

php
'links' => [
    public_path('storage') => storage_path('app/public'),
    public_path('images') => storage_path('app/images'),
],

可以使用 storage:unlink 命令销毁你配置的符号链接:

shell
php artisan storage:unlink

驱动程序先决条件

S3 驱动程序配置

在使用 S3 驱动程序之前,你需要通过 Composer 包管理器安装 Flysystem S3 包:

shell
composer require league/flysystem-aws-s3-v3 "^3.0" --with-all-dependencies

S3 磁盘配置数组位于你的 config/filesystems.php 配置文件中。通常,你应该使用以下环境变量配置你的 S3 信息和凭据,这些环境变量由 config/filesystems.php 配置文件引用: