Laravel 获取存储在存储公共文件夹中的文件的公共 url

Jon*_*son 2 php file-upload laravel laravel-storage

在 Windows 上我有 Xampp。我的应用程序位于 Anuglar 和 Laravel 8 中,我将文件添加到存储文件夹中的 public 文件夹中。配置在filesystem.php

'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],
Run Code Online (Sandbox Code Playgroud)

.env文件中:

APP_URL=http://localhost:8082/prftbx-crm-api/public
Run Code Online (Sandbox Code Playgroud)

公共文件夹中的文件:

 Directory of C:\xampp\htdocs\crm-api\storage\app\public

06/25/2021  11:01 AM    <DIR>          .
06/25/2021  11:01 AM    <DIR>          ..
04/26/2021  10:57 PM                14 .gitignore
06/25/2021  11:01 AM               510 381787c3ad1442cc882ee427e93af805.txt
Run Code Online (Sandbox Code Playgroud)

在 Laravel 中,我使用以下方法返回 url:

$fileDTO->filePath = Storage::url($fileEntity->file_name);
Run Code Online (Sandbox Code Playgroud)

鉴于我有地址:

/storage/381787c3ad1442cc882ee427e93af805.txt
Run Code Online (Sandbox Code Playgroud)

当我在浏览器中输入 url 时:

http://localhost:8082/crm-api/public/storage/381787c3ad1442cc882ee427e93af805.txt
Run Code Online (Sandbox Code Playgroud)

我明白了404,找不到文件

Joh*_*obo 6

首先运行以下命令

php artisan storage:link
Run Code Online (Sandbox Code Playgroud)

然后你可以

http://localhost:8082/storage/381787c3ad1442cc882ee427e93af805.txt
Run Code Online (Sandbox Code Playgroud)

将应用程序 URL 保留为

APP_URL=http://localhost:8082
Run Code Online (Sandbox Code Playgroud)

正如文件所说

应用程序文件系统配置文件中包含的公共磁盘适用于可供公开访问的文件。公共盘默认使用本地驱动,文件存放在storage/app/public下。

要使这些文件可以从网络访问,您应该创建一个从 public/storage 到 storage/app/public 的符号链接。利用此文件夹约定将可将可公开访问的文件保存在一个目录中,当使用 Envoyer 等零停机时间部署系统时,可以在部署之间轻松共享该目录。

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

php artisan storage:link 存储文件并创建符号链接后,您可以使用 asset helper 创建文件的 URL:

参考:https: //laravel.com/docs/8.x/filesystem#the-public-disk