Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 08.03.2015 02:28:36

Загрузка изображений

Есть код

    $request->file('img')->move(public_path('thumb/items'), $request->file('img')->getClientOriginalName()); 

    $data = $request->except(['img']);

    $data['img'] = '/thumb/items/' . $request->file('img')->getClientOriginalName(); 

Повторяется во всех функциях update и store. Можно ли как то вынести в отдельный фасад, или куда то еще, что бы упростить код?

Не в сети

#2 08.03.2015 11:23:04

Re: Загрузка изображений

Можно конечно. Есть демка Services/Registrar. Можете сделать аналогично.

Или http://laravel.com/docs/5.0/bus

Не в сети

#3 10.03.2015 05:48:17

Николай

Re: Загрузка изображений

Подскажите пожалуйста как правильно осуществлять загрузку изображений через форму, и последующий вывод например списка этих изображений в представлении?

#4 10.03.2015 07:31:07

Re: Загрузка изображений

Николай пишет:

Подскажите пожалуйста как правильно осуществлять загрузку изображений через форму, и последующий вывод например списка этих изображений в представлении?

загруженные изображения нужно переместить в папку приложения, сохранить куда-то их список, потом список передавать в вид и там их отображать. smile

Не в сети

#5 10.03.2015 18:30:13

Re: Загрузка изображений

constb пишет:
Николай пишет:

Подскажите пожалуйста как правильно осуществлять загрузку изображений через форму, и последующий вывод например списка этих изображений в представлении?

загруженные изображения нужно переместить в папку приложения, сохранить куда-то их список, потом список передавать в вид и там их отображать. smile

Как лучше хранить этот список?  И как в целом варианты хранения есть?


-----------------------
У себя использую такую форму

<div class="form-group">
    {!! Form::label('image', 'Image:')!!}
    {!! Form::file('img',['class' => 'form-control'])!!}
</div>

и такой контроллер

       $request->file('img')->move(public_path('thumb'), $request->file('img')->getClientOriginalName()); 
        
       $data = $request->except(['img']);

       $data['img'] = '/thumb/' . $request->file('img')->getClientOriginalName(); 

       $category->update($data);

Но как лучше сделать, когда надо хранить несколько разных размеров изображения?

Не в сети

#6 11.03.2015 09:22:24

Re: Загрузка изображений

  1. Но как лучше сделать, когда надо хранить несколько разных размеров изображения?

либо ресайзить сразу и формировать имена изображений в определённом формате — тогда можно хранить только одно имя (удобно если используются @2x-изображения для ретины), либо ресайзить на лету и кэшировать отресайзенное — тут с ларой лучше сразу браться за Glide.

Не в сети

#7 02.09.2015 21:45:02

Cosinus

Re: Загрузка изображений

Скажите пожалуйста, для чего эта строчка  <code>$data = $request->except(['img']);</code>?

#8 03.09.2015 10:36:23

Re: Загрузка изображений

Она означает, что в массив $data мы передаем все поля из $request, кроме поля img, т.к. далее идет его переопределение и добавление в $data переопределенного значения img

Не в сети

#9 14.02.2017 00:23:40

Re: Загрузка изображений

Уже, наверное, поздно отвечать, но вот появился пакет для гибкой работы с изображениями. Вот описание на русском: UploadImage, там же есть ссылка на документацию и установку (уже на английском).

Не в сети

#10 14.02.2017 06:19:32

Re: Загрузка изображений

kirill_dan пишет:

Уже, наверное, поздно отвечать, но вот появился пакет для гибкой работы с изображениями. Вот описание на русском: UploadImage, там же есть ссылка на документацию и установку (уже на английском).

Кирилл, я правильно понял, ты и есть автор этого пакета?

Я решил эту проблему достаточно просто. Когда пользователь загружает изображение, то мой функционал его получает от пользователя, сохраняет на диск, потом получает из диска и перекодирует в текстовый формат Base64 и отдает его в виде превьюшки назад пользователю. А оригинальное изображение удаляет с диска. Вот и все. Если пользователь не засабмитит форму, то ничего страшного не произойдет. А если засабмитит, то изображение опять загрузится на диск.

когда я прочитал этот пассаж, я слегка охренел. в 2017м году FileReader есть как бы не во всех браузерах в принципе, грузить файл на сервер только чтобы получить его base64 совершенно не нужно – браузер умеет делать это совершенно самостоятельно:

<script>
	$(function() {
		$('#some-image-input').on('change', function () {
			var file = this.files[0]
			if (file != null && file.type.match('image.*')) {
				var reader = new FileReader()
				reader.onload = function (e) {
					$('#some-image-placeholder').empty().append(
						$('<img>').attr('src', e.target.result).css('max-width', '100%')
					)
				}
				reader.readAsDataURL(file)
			}
		})
	})
</script>

на сервер после этого загружается уже файл с формой как обычно. превью появляется сразу как файл выбран в инпуте

Не в сети

#11 14.02.2017 16:39:13

Re: Загрузка изображений

constb пишет:
kirill_dan пишет:

Уже, наверное, поздно отвечать, но вот появился пакет для гибкой работы с изображениями. Вот описание на русском: UploadImage, там же есть ссылка на документацию и установку (уже на английском).

Кирилл, я правильно понял, ты и есть автор этого пакета?

когда я прочитал этот пассаж, я слегка охренел. в 2017м году FileReader есть как бы не во всех браузерах в принципе, грузить файл на сервер только чтобы получить его base64 совершенно не нужно – браузер умеет делать это совершенно самостоятельно:

<script>
	$(function() {
		$('#some-image-input').on('change', function () {
			var file = this.files[0]
			if (file != null && file.type.match('image.*')) {
				var reader = new FileReader()
				reader.onload = function (e) {
					$('#some-image-placeholder').empty().append(
						$('<img>').attr('src', e.target.result).css('max-width', '100%')
					)
				}
				reader.readAsDataURL(file)
			}
		})
	})
</script>

на сервер после этого загружается уже файл с формой как обычно. превью появляется сразу как файл выбран в инпуте

Спасибо большое за ваше замечание. Я в принципе бэкендер и не так силен в JS, как те, которые на нем каждый день пишут. Я внесу исправление в следующий релиз.

Не в сети

Подвал раздела