Laravel 5.4 未找到存储文件

Laravel 5.4 storage file not found

我正在使用 laravel 5.4。我在 storage/app/public/documents 文件夹中上传了一些文档文件,例如

$request->paper_file->store('documents');

我的文件上传成功。

在文件系统中默认存储是public public conf 就像

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

但是当我点击 /storage/documents/hQqlgifnVVH8bmrRPVdZ9aFGbhLmcc7g7bHZSX4u.pdf 提示找不到404。如何解决这个问题。

默认情况下 Laravel 将文件放在 storage/app/public 目录中,该目录无法从外部 Web 访问。因此,您必须在该目录和您的 public 目录之间创建一个符号 link:

storage/app/public -> public/storage

您可以通过执行 php artisan storage:link 命令 (docs) 来做到这一点。

在laravel^5.8:

  • 确保你 运行 命令 php artisan storage:link 到 link storage/app/publicpublic/storage

现在:

// this return some like 'public/documents/file.ext'
$path = $request->paper_file->store('public/documents');

// this return some like 'storage/documents/file.ext'
$publicPath = \Storage::url( $path) );

// this return some like '< APP_URL env variable >/storage/documents/file.ext'
$url = asset( $publicPath );

在 运行 php artisan storage:link 之后,它会在 public 文件夹中创建一个符号 link,您可以像这样检索记录 <img src='{{ asset("public/$advert6") }}' class="img-responsive">。您应该包括 public 目录

将项目移动到不同的文件夹后,我遇到了这个问题。 如果您已经生成了存储 link,请尝试 删除 public/storage 文件夹并再次 运行:

php artisan storage:link

当您使用 Laravel 的存储功能上传图片时,它会存储在存储文件夹中。 例如: storage/app/public/avatars/file1.png

但是当你想通过URL访问它时,你应该这样访问它:

storage/avatars/file1.png

它对我有用,使用 Laravel 7.x。

如果您来自 laravel 8.x 并且确实 运行 命令 php artisan storage:link(创建符号 link ),但是您的代码无法正常工作,即您尝试加载的文件未显示,那么您和我一样。

刚刚 awais ahmad 提到,此解决方案对我的 laravel 8x 项目很有帮助。我没有使用资产辅助函数从我的 blade 文件中添加“存储”路径名,所以我的图像路径没有输出任何东西,但是当我像这样输入 'storage' 路径名时 asset('storage/uploads/pic1.png) 我的代码成功了!

猜猜这可能对某人有所帮助。