2017-04-24 72 views
1

我在學習Laravel 5.4,現在我正嘗試上傳圖片並在html上顯示上傳的圖片。Laravel 5.4顯示上傳的圖片問題

似乎文件已成功上傳,但當我想在Html中顯示圖像時,圖像出現404錯誤,並且不顯示任何內容。

這是我的設置和代碼:

public function store(Request $request) 
    { 
     $this->validate($request, [ 
      'name' => 'required|string|max:255', 
      'desc' => 'required|string', 
      'width' => 'required|numeric', 
      'height'=> 'required|numeric', 
      'artist'=> 'required|exists:artists,id', 
      'photo' => 'required|file' 
     ]); 

     $artistInfo = Artist::find($request->artist); 

     $fileExtension = $request->file('photo')->extension(); 

     $originalFileName = $request->file('photo')->getClientOriginalName(); 

     $filePath = Storage::putFile('public', $request->file('photo'), 'public'); 


     Photo::create([ 
      'name'  => $request->name, 
      'origName' => $originalFileName, 
      'url'  => $filePath, 
      'artist_id' => $request->artist, 
      'desc'  => $request->desc, 
      'width'  => $request->width, 
      'height' => $request->height 
     ]); 

     return $filePath;//this for test 
    } 

而我的劍:

   @forelse($photos as $photo) 
        <tr> 
         <td>{{ $photo->name }}</td> 
         <td> 
          <img class="img" src="{{ asset('public/storage/' . $photo->url) }}" alt="{{ $photo->name }}" /></td> 
         <td>{{ $photo->artist->name . ' ' . $photo->artist->family }}</td> 
         <td>{{ $photo->desc }}</td> 
         <td>{{ $photo->width }}</td> 
         <td>{{ $photo->height }}</td> 
         <td class="text-center"> 
          <a href="{{ route('artists.edit', ['id' => $photo->id]) }}"> 
           <i class="material-icons">edit</i> 
          </a> 
         </td> 
         <td class="text-center"> 
          <a href="{{ route('artists.edit', ['id' => $photo->id]) }}"> 
           <i class="material-icons">assignment_turned_in</i> 
          </a> 
         </td> 
        </tr> 
       @empty 
        <tr> 
         <td>There's no photo Yet</td> 
         <td>&mdash;</td> 
         <td>&mdash;</td> 
         <td>&mdash;</td> 
         <td>&mdash;</td> 
        </tr> 
       @endforelse 

注:

我做了一個符號鏈接到我的公用文件夾使用php artisan storage:link和符號鏈接工作fi NE ...

我在刀片改變了這一行:

<img class="img" src="{{ asset('public/storage/' . $photo->url) }}" alt="{{ $photo->name }}" /></td> 

,並試圖以這些方式:

<img class="img" src="{{ asset(storage_path() . ($photo->url)) }}" alt="{{ $photo->name }}" /></td> 


<img class="img" src="{{ storage_path() . ($photo->url) }}" alt="{{ $photo->name }}" /></td> 

$photo->url例如具有圖像文件名jDHPOTh7iejFABANSzasNbBWJ09DqLbqJb8ymJhv.png

請你讓我知道哪一部分是我的問題?

由於提前

UPDATE:

我使用PhpStorm IDE和當我下載我的公用文件夾到我的項目 - 或同步這個 - 我的符號鏈接呢沒有出現在公共文件夾列表中...

這是ls from my publ IC文件夾:

list of folders in public

這是我phpStorm項目視圖下載公用文件夾在我的主機新副本:

Folder list inside my IDE

而作爲一張紙條: 我開始在windows開發這個網站,然後我把整個項目移到我的linux r表情服務器...

+0

試過''{asset('public /')。'/'。 $ photo-> url}}'? – linktoahref

+0

@linktoahref是的,但沒有工作......! – Kiyarash

+0

我認爲這可以工作,因爲你試圖獲得路徑使用生成的ID {{storage_path($ photo-> url)}}' – linktoahref

回答

1

感謝所有參與,但在我的情況下有一個棘手的問題...

我登錄到我的服務器使用root,當我輸入php artisan storage:link時,符號鏈接由root作爲owner,似乎Apache沒有權限訪問此符號鏈接,因此文件無法訪問在http

SOLUTION

我有一個VDS服務於5點不同的網站,所以 我也只是符號鏈接的所有者的所有者更改爲我的親戚的用戶名和解決了這個問題...

chown -R usergroup:username /path/to/link 

就是這樣...

0

我認爲這個問題是在這裏:

$filePath = Storage::putFile('public', $request->file('photo'), 'public'); 

在這裏你正在對public文件夾,在這裏你的文件:

<img class="img" src="{{ asset('public/storage/' . $photo->url) }}" alt="{{ $photo->name }}" /></td> 

你正試圖從public/storage/得到它。因此改變路徑:

<img class="img" src="{{ asset('public/' . $photo->url) }}" alt="{{ $photo->name }}" /></td> 

並重試。

注:這裏上傳的圖片路徑存儲在public/image.extension,所以從同一public目錄

+0

感謝您的回答,但什麼是你的建議?我嘗試了很多不同的方式... – Kiyarash

+0

檢查更新的答案 –

+0

再次感謝,但我仍然有同樣的情況... !!! – Kiyarash