2017-02-12 28 views
0

我目前正在將用戶上傳的圖像保存到storage/dokumentarkiv/{{$ building-> id}}/byggbilder並使用Intervention來保存圖像的縮略圖。然後我想在我的視圖中顯示網格中的所有圖像。下面的代碼正在工作,但我想知道是否有一個更清晰的方式來顯示圖像編碼圖像到數據網址給我的HTML每個圖像的base64代碼。Laravel 5.4從沒有符號鏈接的存儲中顯示圖像

我的控制器:

public function storeImage(Request $request, $id) 
{ 
    $building = Building::find($id); 

    $file = $request->file('imageInput'); 

    $fileName = $request->imageName; 
    $fileOriginalName = $request->file('imageInput')->getClientOriginalName(); 
    $fileExtension = $request->file('imageInput')->getClientOriginalExtension(); 
    $fileSize = $request->file('imageInput')->getSize(); 
    $mimeType = $request->file('imageInput')->getMimeType(); 
    $path = $building->id.'/byggbilder'.'/'; 
    $thumbnailPath = $building->id.'/byggbilder'.'/thumbnails'.'/'; 
    $thumbnailOriginalName = $request->file('imageInput')->getClientOriginalName(); 

    $image = new Image; 

    $image->name = $fileName; 
    $image->original_name = $fileOriginalName; 
    $image->path = $path; 
    $image->thumbnail_path = $thumbnailPath; 
    $image->thumbnail_original_name = $thumbnailOriginalName; 
    $image->file_extension = $fileExtension; 
    $image->file_size = $fileSize; 
    $image->mime_type = $mimeType; 

    $building->buildingImages()->save($image); 
    $dateTime = $image->created_at->format('d-m-Y-H-i-s'); 

    $mImage = Img::make($request->file('imageInput')->getRealPath()); 

    $mImage->save(storage_path('dokumentarkiv/').$path.'('.$dateTime.')'.$fileOriginalName) 
      ->resize(300, null, function ($constraint) { 
      $constraint->aspectRatio(); 
      $constraint->upsize(); 
      }) 
      ->save(storage_path('dokumentarkiv/').$thumbnailPath.'('.$dateTime.')'.$fileOriginalName); 

    return redirect()->back(); 
} 

檢索圖像,並將其傳遞到視圖功能:

public function administration(Request $request, $id) 
{ 
    $moderator = Auth::user(); 

    $building = Building::find($id); 
    $buildingID = $building->id; 

    // Find the buildings users 
    $buildingsUsers = $building->users()->get(); 

    // Find the buildings images 
    $images = $building->buildingImages()->get(); 

    foreach ($images as $image) { 
     $test = (string) Img::make(storage_path('dokumentarkiv/25/byggbilder/(30-01-2017-17-20-46)logo-test.png'))->encode('data-url'); 
    } 

    return view('users.buildingAdministration', compact('moderator', 'building', 'buildingID', 'buildingsUsers', 'images', 'test')); 
} 

我只是硬編碼的URL,以測試它是否工作。當我找到一個好的解決方案時,我會改變這個動態。

我的觀點:

<img src="{{$test}}" alt=""> 

我也試圖在我看來,只要使用此:

@php 
$img = Image::make(file_get_contents(storage_path('dokumentarkiv/25/byggbilder/(30-01-2017-17-20-46)logo-test.png'))); 
echo $img->response(); 
@endphp 

但是,這只是顯示在頁面上:

HTTP/1.0 200 OK Cache-Control: no-cache, private Content-Length: 9957 
Content-Type: image/png �PNG IHDR*J�� pHYs���+ 
IDATx��{�e���[Փ�1�D6و9!�����[email protected]\ 
Dȸ��"˲D�;�9{��(���Q�f�� 
f��f�6�6�,ƨ1f#Lf��w�x޺tu�tu��n�>��t׽���W���< 
��ֲ;�f� ��X�PA�:�� 
�{c���S��u�{w.>��]�J�(�W`Ɖj��х�;�a`��'�i�Yh�KK 
]�e^E�UDb����^U�۵�?~��n��/S�D��3FTkV�\ � 
:xDB�y���7P�,�4%DUI-s 

欣賞所有投入!

+0

據我知道你不能從存儲文件夾中的文件,而不符號鏈接...有人糾正我,如果我錯了 – lewis4u

+0

@ lewis4u我已經找到了所有解決方案使用synlinks,但我不能使用符號鏈接,因爲圖像不應該被所有人訪問。這就是爲什麼我在Storage中創建圖像文件夾而不是Public的原因。 – GKMelbo

+0

那麼你必須使用中間件....你不能讓一些用戶和其他用戶不能使用圖像...你必須使用中間件來說明這個用戶是否有權利看到它,然後他就可以看到它,如果他沒有權利,那麼他不能 – lewis4u

回答

0

您可以像

[email protected]($path){ 
    $img = Image::make($path); 
    return $img->response(); 
} 

創建控制器的方法再後來,你可以指定這個方法的中間件。

榮譽,繼續努力