📜  laravel 访问存储附件 - PHP (1)

📅  最后修改于: 2023-12-03 15:17:16.275000             🧑  作者: Mango

Laravel 访问存储附件

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。