我是laravel框架的新手,我想显示存储在存储文件夹中的图像.我试过这个
路线
Route::get('/userimage/{filename}', [
'uses' =>'PostController@getUserImage',
'as' => 'account.image',
]);
Run Code Online (Sandbox Code Playgroud)
刀片文件以获取URL并显示图像
</section>
@if (Storage::disk('public')->has($user->first_name . '-' . $user->id . '.jpg'))
<section class="row new-post">
<div class="col-md-6 col-md-offset-3">
<img src="{{ route('account.image', ['filename' => $user->first_name . '-' . $user->id . '.jpg']) }}" alt="" class="img-responsive">
</div>
</section>
Run Code Online (Sandbox Code Playgroud)
调节器
public function getUserImage($filename)
{
$file = Storage::disk('public')->get($filename);
return new Response($file,200);
}
Run Code Online (Sandbox Code Playgroud)
如何使用上面的代码显示图像?
您的控制器应处理所有“幕后”过程,并且您的视图仅显示html和php变量。这是MVC模式的重点。
因此,控制器应返回一个视图,并在其视图中插入文件路径。
public function getUserImage($filename)
{
$file = Storage::disk('public')->get($filename);
return view('yourviewnamehere', ['myFile' => $file]);
}
Run Code Online (Sandbox Code Playgroud)
现在,您的视图将能够访问变量$myFile:
<!-- ... -->
@if (Storage::disk('public')->has($user->first_name . '-' . $user->id . '.jpg'))
<section class="row new-post">
<div class="col-md-6 col-md-offset-3">
<img src="{{ URL::to('img/' . $myFile) ]) }}" alt="" class="img-responsive">
</div>
</section>
@endif
<!-- ... -->
Run Code Online (Sandbox Code Playgroud)
我假定中的图像的文件路径public/img/,因此可以随时更改代码的这一部分。另外,无论您的变量是否包含后缀.jpg,都应添加或不添加后缀。
我有同样的问题.关键是,你不能在存储访问的东西,所以它建议在这里你可以简单地做一个symbolic link从public/storage到storage/app/public使用此命令php artisan storage:link,然后就可以通过类似这样的公共目录中存储目录访问什么asset('storage/path_to_file'),当然有时是不可能的为此(例如,当您将项目部署到共享主机时).如果是这种情况,您可以尝试将文件上传到公共目录(每个人都可以访问)并使用asset()方法1 来处理文件.您只需在磁盘阵列中定义一个新的磁盘驱动程序即可config/filesystems.php.在laravel 5.4,三位车手已经被默认值(定义'local','public','s3').你只需要添加你自己的驱动程序,我们称之为它'MyDiskDriver'(但你可以随意调用它).
config/filesystems.php
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
's3' => [
'driver' => 's3',
'key' => env('AWS_KEY'),
'secret' => env('AWS_SECRET'),
'region' => env('AWS_REGION'),
'bucket' => env('AWS_BUCKET'),
],
'MyDiskDriver' => [
'driver' => 'local',
'root' => public_path('uploads'),
'url' => env('APP_URL').'/public',
'visibility' => 'public',
],
],
];
Run Code Online (Sandbox Code Playgroud)
请注意,对于'MyDiskDriver','root'已设置为public/uploads(这意味着当您使用Illuminate\Http\UploadedFile类的存储方法并传递'MyDiskDriver'的名称作为第二个参数时,laravel将上传公共/上传目录中的文件.)
当您使用Illuminate\Http\UploadedFile类的存储方法时,您可以将新创建的磁盘驱动程序的名称(此处为"MyDiskDriver")作为第二个参数传递,以便laravel可以使用它来存储文件,您正在尝试存储,在"root"中指定的目录(此处为public/uploads).
您可以使用该asset()方法访问上传的文件.
编辑
您可以将FILESYSTEM_DRIVER环境变量的值更改为.env刚刚创建的磁盘驱动程序的名称,而不是执行第2步MyDiskDriver.在我们的示例中.这样,只需更改FILESYSTEM_DRIVER环境变量的值,即可轻松更改磁盘驱动程序,而无需更改代码
| 归档时间: |
|
| 查看次数: |
13698 次 |
| 最近记录: |