2017-07-25 41 views
1

在存儲我有/項目/(nameofproject - 不總是相同)/header.jpg,也有/項目/(nameofproject - 不總是相同)/home.png。Laravel符號鏈接存儲和顯示圖片

我如何在我的視圖中顯示它們?

我再解釋一下。 在過去,我有/ public/assets/img/projects項目,現在我動態地做到這一點。

我的函數來創建新的項目並保存圖像是這樣的:

public function storeProject(Request $request) 
     { 
     $project = new Project(); 
     $project->slug = $request->input("slug"); 
     $project->position = $request->input("position"); 
     $project->public = $request->input("public"); 
     $project->pathheader = $request->file('pathheader'); 
     $project->pathhome = $request->file('pathhome'); 
     \Storage::disk('projects')->makeDirectory($project->slug); 
     \Storage::disk('projects')->putFileAs($project->slug,$project->pathheader,'header.png'); 
     \Storage::disk('projects')->putFileAs($project->slug,$project->pathhome,'home.png'); 
     $project->save(); 
     return redirect('/admin/projects'); 

     } 

我過去做的項目,我用這種表現出來的圖片:(我傳遞到視圖中的變量$項目)

<p class="lead"><img src="/assets/img/projects/{{$project->slug}}/header.jpg" width="50%" >Header</p> 
<p class="lead"><img src="/assets/img/projects/{{$project->slug}}/home.jpg" width="50%">Home</p> 

如何顯示存儲文件夾的圖像?

編輯

filesystems.php代碼:

'projects' => [ 
      'driver' => 'local', 
      'root' => storage_path() . '/projects', 
      'visibility' => 'public', 
     ], 

查看看現在這個樣子:

@if (Storage::disk('projects')->has($project->slug)) 
<img src="{{ asset('storage/projects/'.$project- 
>slug.'/header.jpg') }}" width="50%" > 
@else 
<p class="lead"><img src="/assets/img/projects/{{$project- 
>slug}}/header.jpg" width="50%" >Header</p> 
@endif 

我做:

PHP工匠存儲:鏈接

圖片網址:http://url.loc/storage/projects/hola-que-tal/header.jpg(未顯示)。

+0

https://stackoverflow.com/questions/40936332/laravel-link-to-a-file-saved-in-storage-folder – Bas

+0

@Bas「請記住,如果您使用的是本地驅動程序,那麼所有文件應該可以公開訪問的應該放在storage/app/public目錄中。此外,你應該在public/storage中創建一個指向storage/app/public目錄的符號鏈接。「不在存儲/應用程序/公共,他們在/存儲/項目/ $文件夾名稱(變量) –

回答

1

最簡單的解決方案是使用public disk。如果運行了php artisan storage:link命令,您可以使用下面的代碼:

\Storage::disk('public')->makeDirectory($project->slug); 
\Storage::disk('public')->putFileAs($project->slug, $project->pathheader, 'header.png'); 
\Storage::disk('public')->putFileAs($project->slug, $project->pathhome, 'home.png'); 

而且你的HTML:

<p class="lead"><img src="{{ asset('storage/projects/'.$project->slug.'/header.jpg') }}" width="50%" >Header</p> 
<p class="lead"><img ssrc="{{ asset('storage/projects/'.$project->slug.'/home.jpg') }} width="50%">Home</p> 

爲配置的例子在config/filesystems.php

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

當然,你可以編輯projects磁盤,以便它具有正確的root。但我不確定你的配置如何查找projects磁盤。

+0

嗨@ Dees040我不能使用公共磁盤,這是一個問題。我正在嘗試做一些事情,也許你可以幫助我。我編輯問題的底部。如果你知道如何進行聊天,那麼你需要做:) –

+0

編輯的問題 –

+0

你發送'/ {{$ project-> slug}}'作爲一個字符串。應該是這樣的:'Storage :: disk('projects') - > has($ project-> slug)'。但是,然後你檢查文件夾是否存在。也許你還需要添加文件名?我不確定你想要完成什麼。 –