В настоящее время я сохраняю изображения, которые пользователь загружает в 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�xtu�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
Цените все входы!
, насколько я знаю, вы не можете получить файл из папки хранения без линка ... кто-то поправьте меня, если я ошибаюсь – lewis4u
@ lewis4u Всех решений, которые я нашел использует synlinks, но я не могу использовать символические ссылки, потому что изображения не должны быть доступны для всех. Вот почему я создал папку с изображениями в Storage вместо Public. – GKMelbo
Ну, тогда вы должны использовать промежуточное ПО .... вы не можете сделать изображения доступными для некоторых пользователей, а для других - не ... вы должны использовать для этого промежуточное ПО и сказать, может ли этот пользователь иметь право видеть его, тогда он может это увидеть , и если он не имеет права, то он не может – lewis4u