2017-02-12 9 views
0

В настоящее время я сохраняю изображения, которые пользователь загружает в storage/dokumentarkiv/{{$ building-> id}}/byggbilder и использует Intervention для сохранения эскиза изображения , Затем я хочу отобразить все изображения в сетке в моем представлении. Код ниже работает, но мне было интересно, есть ли более чистый способ отображения изображения в качестве кодирования изображения в data-url, который дает мне код base64 для каждого изображения в html.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(); 
} 

Позже вы можете присвоить этот метод ИМ.

Престижности, продолжать работать

 Смежные вопросы

  • Нет связанных вопросов^_^