📅  最后修改于: 2023-12-03 15:17:16.275000             🧑  作者: Mango
Laravel 提供了一种方便的方式来存储和访问附件 (也被称为文件)。存储附件可以使用本地磁盘、Amazon S3、Rackspace Cloud Storage、FTP 等。在访问附件时,Laravel 提供了一种统一的方式来处理不同的存储位置。
在 Laravel 中,你可以通过 config/filesystems.php 配置文件来设置存储选项。
例如,要使用本地文件系统存储文件,可以将以下示例添加到 config/filesystems.php 文件中:
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
],
在上面的示例中,local 是磁盘名称,driver 指定了驱动 (local 表示本地文件系统),root 指定了存储附件的根目录。
你还可以配置多个磁盘,以便将附件存储到不同的位置。例如,以下示例配置了一个名为 public 的磁盘,用于存储公共附件:
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
],
在上面的示例中,public 磁盘的 root 是 storage/app/public,url 是应用程序的 URL(例如 http://example.com/storage),visibility 是文件的默认可见性 (public 或 private)。
要将文件存储到磁盘上,你可以使用 Storage 类的 put() 方法:
use Illuminate\Support\Facades\Storage;
Storage::disk('local')->put('file.txt', 'Hello, World!');
在上面的示例中,使用 local 磁盘存储了一个名为 file.txt 的文件。
要上传文件到磁盘上,可以使用 Laravel 的 HTTP 请求上传文件。上传的文件将被存储在临时目录中,可以使用 store() 方法将其移动到指定的磁盘上:
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
Route::post('upload', function (Request $request) {
$file = $request->file('file');
Storage::disk('local')->put($file->getClientOriginalName(), file_get_contents($file));
});
在上面的示例中,从 HTTP 请求的文件输入获取文件内容,并将其存储到 local 磁盘的文件夹中。
通常,在项目中显示附件时,你需要生成一个 URL,通过该 URL 可以访问存储的文件。Laravel 为此提供了方便的助手函数:
use Illuminate\Support\Facades\Storage;
$url = Storage::url('file.txt');
在上面的示例中,url() 方法返回存储的文件的 URL,例如 http://example.com/storage/file.txt。
在本文中,我们介绍了如何存储和访问附件。要存储附件,你需要设置存储选项,并使用 Storage 上传文件。要访问附件,你可以使用 url() 助手函数生成 URL。