我正在使用laravel 5.4。我在存储/ app / public / documents文件夹中上传了一些文档文件,如
$request->paper_file->store('documents');
我的文件已成功上传。
文件系统默认存储中的是公共的 和公众的关系就像
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',],
但是当我点击/storage/documents/hQqlgifnVVH8bmrRPVdZ9aFGbhLmcc7g7bHZSX4u.pdf 它说找不到404.如何解决这个问题。
答案 0 :(得分:18)
默认情况下,Laravel将文件放在storage/app/public
目录中,该目录无法从外部网络访问。因此,您必须在该目录与公共目录之间创建一个符号链接:
storage/app/public -> public/storage
您可以通过执行php artisan storage:link
命令(docs)来执行此操作。
答案 1 :(得分:2)
将项目移动到不同的文件夹后,这个问题发生在我身上。 如果您已经生成了存储链接,请尝试删除 public/storage 文件夹并再次运行:
php artisan storage:link
答案 2 :(得分:1)
在laravel ^ 5.8中:
php artisan storage:link
将storage/app/public
与public/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 );
答案 3 :(得分:1)
当你使用 Laravel 的存储功能上传图片时,它会存储在一个存储文件夹中。 例如: storage/app/public/avatars/file1.png
但是当你想通过 URL 访问它时,你应该像这样访问它:
storage/avatars/file1.png
它对我有用,使用 Laravel 7.x。
答案 4 :(得分:0)
运行php artisan storage:link
后,它将在公用文件夹中创建一个符号链接,您可以像 <img src='{{ asset("public/$advert6") }}' class="img-responsive">
这样检索记录。您应该包含public
目录
答案 5 :(得分:0)
如果您来自 laravel 8.x 并且确实运行了命令 php artisan storage:link
(创建符号链接),但是您的代码不起作用,即您尝试加载的文件没有显示,那么你和我一样。
刚刚提到了 awais ahmad,这个解决方案对我的 Laravel 8x 项目很有帮助。我没有使用资产辅助函数从我的刀片文件中添加“存储”路径名,所以我的图像路径没有输出任何东西,但是当我像这样输入 'storage'
路径名时 asset('storage/uploads/pic1.png)
我的代码工作了!
猜猜这可能对某人有所帮助。