Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Подскажите пожалуйста урок, статью или чтото вроде того как правильно загружать изображения с помощью Laravel в указанную папку и добавлением ссылки на этот файл в БД.
Не в сети
Мне тоже интересно, особенно куда загружать...
Не в сети
Урок не урок)), а пример есть.
http://image.intervention.io/use/uploads
Не в сети
Урок не урок)), а пример есть.
http://image.intervention.io/use/uploads
Это библиотека, а хочется норм пример...
Не в сети
%%(php)
public function postUpload() {
$file = Input::get('photo');
if(!isset($file))
return Response::json([
'status' => 'error',
'errors' => ['error'=>'Ошибка! Вы не выбрали файл.']
], 400);
$destinationPath = 'uploads/';
$filename = str_random(12);
list($type, $file) = explode(';', $file);
list(, $file) = explode(',', $file);
$file = base64_decode($file);
$photo = file_put_contents($destinationPath.$filename, $file);
if($photo)
return Response::json([
"status" => "ok",
"link" => "uploads/" . $filename
], 200);
return Response::json([
'status'=>'error',
'errors'=>['error'=>'Ошибка! Попробуйте позже']
], 400);
}
%%
Выше предложенное решение принимает файл в виде строки в base_64 и сохраняет в директории public/uploads с случайным именем. Код Frontend'a могу тоже приложить, но он для AngularJS. Также можно принять файл через File::get() путем принятия формы или через Jquery.ajax передав данные формы с помощью FormData
Изменено GONG (15.02.2015 22:49:03)
Не в сети
HunterNomad пишет:Урок не урок)), а пример есть.
http://image.intervention.io/use/uploadsЭто библиотека, а хочется норм пример...
А это не пример?)))
// read image from temporary file
$img = Image::make($_FILES['image']['tmp_name']);
// resize image
$img->fit(300, 200);
// save image
$img->save('foo/bar.jpg');
Не в сети
dima9595 пишет:HunterNomad пишет:Урок не урок)), а пример есть.
http://image.intervention.io/use/uploadsЭто библиотека, а хочется норм пример...
А это не пример?)))
// read image from temporary file
$img = Image::make($_FILES['image']['tmp_name']);// resize image
$img->fit(300, 200);// save image
$img->save('foo/bar.jpg');
Я имел ввиду пример, который написан на Laravel без сторонних библиотек)
Не в сети
if (Input::hasFile('file')) {
$dir = '/uploads'.date('/Y/m/d/');
do {
$filename = str_random(30).'.jpg';
} while (File::exists(public_path().$dir.$filename));
Input::file('file')->move(public_path().$dir, $filename);
$profile->image = $dir.$filename;
$profile->save();
}
делал чисто для jpg но поставишь при валидации (mime) и тд сможешь сделать все, можешь имя сделать оригинальным именем и расширением
Не в сети
if (Input::hasFile('file')) { $dir = '/uploads'.date('/Y/m/d/'); do { $filename = str_random(30).'.jpg'; } while (File::exists(public_path().$dir.$filename)); Input::file('file')->move(public_path().$dir, $filename); $profile->image = $dir.$filename; $profile->save(); }
делал чисто для jpg но поставишь при валидации (mime) и тд сможешь сделать все, можешь имя сделать оригинальным именем и расширением
благодарю за пример!
Не в сети
А пример выше подходит для мультизагрузки нескольких изображений?
Не в сети
А пример выше подходит для мультизагрузки нескольких изображений?
А проверить?
Для загрузки нескольких файлов, нужно:
1. Переименовать поле формы в массив:
<input name="images[]" type="file" multiple>
2. Обойти полученные файлы в цикле
foreach(Input::file('images') as $image)
{
$image->move();
}
Не в сети
Я имел ввиду пример, который написан на Laravel без сторонних библиотек)
я бы тоже не отказался от примера.
думаю как реализовать загрузку фотографий в статьи.
Открываю для себя Laravel. Как бы не закрыть.
Не в сети
Ребят, а почему не написать это на чистом php? И кода меньше, и универсальности больше.
Одна ведь функция всего: move_uploaded_file().
В общем, кому пример на чистом php?
Не в сети
Ребят, а почему не написать это на чистом php? И кода меньше, и универсальности больше.
Одна ведь функция всего: move_uploaded_file().В общем, кому пример на чистом php?
Вот решение. Также не особо длинное:
Добавить в контролере в store()
$file = $request->file('image_file');
$filename = $file->getClientOriginalName();
$file->move('../images', $filename);
Добавить в форму в отображении:
{!! Form::label('image', 'Фотография:') . Form::file('image_file',['class' => 'form-control'])!!}
Как записать в базу данных пока не додумался.
Открываю для себя Laravel. Как бы не закрыть.
Не в сети
Вот полное решение с загрузкой на сервер и записью в базу.
public function store(Article $postModel, ArticlesAddRequest $request) //валидация данных в файле app/Http/Requests/ArticlesAddRequest.php и сохранение данных формы
{
$artcl = $postModel->create($request->all());//записываем в базу
$file = $request->file('image_file');
$filename = $file->getClientOriginalName();
$file->move('../images', $filename);//папка для загрузки изображения
if($filename)
{
$article = Article::find($artcl->id);
$article->image = 'images/'.$filename;
$article->save();
}
return redirect()->route('articles');
}
Открываю для себя Laravel. Как бы не закрыть.
Не в сети
Ребят, а почему не написать это на чистом php? И кода меньше, и универсальности больше.
Одна ведь функция всего: move_uploaded_file().В общем, кому пример на чистом php?
Мне, пожалуйста.
Не в сети
tmanager пишет:Ребят, а почему не написать это на чистом php? И кода меньше, и универсальности больше.
Одна ведь функция всего: move_uploaded_file().В общем, кому пример на чистом php?
Мне, пожалуйста.
Пришлю, только сегодня вечером или завтра утром. Я в пути
Не в сети
//fieldName - имя input type="file"
if(isset($_FILES['fieldName'])) //Пришли данные из формы
if($_FILES['fieldName']['size'] > 0) //Файл закачался
{
//Изучим, что это нам закачали (getimagesize() - в ядре)
$info=getimagesize($_FILES['fieldName']['tmp_name']);
if($info === false) //Закачали НЕ изображение
{
//Обрабатываем ошибку
}
else
{
$ext = 'jpg'; //расширение файла
switch($info[2])
{
case IMG_GIF:
$ext = 'gif';
break;
case IMG_PNG:
$ext = 'png';
break;
case IMG_JPEG :
break;
default:
//Как-то реагируйте на то, что не веб-формат
break;
}
//$conn - это подключение к базе данных. Внутри метода надо будет написать
//global $conn;
//Создадим таблицу для того, чтоб делать уникальные имена файлам
//create table pictures(id int primary key auto_increment);
$query='insert into pictures() values()';
mysqli_query($conn,$query);
$id=mysqli_insert_id($conn);
//формируете по своей логике путь к файлу. Например:
$filename=__DIR__.'/../../images/users/image'.$id.'.'.$ext;
//Закачиваем файл
move_uploaded_file($_FILES['fieldName']['tmp_name'], $filename);
if(!file_exists($filename))
{
//Обрабатывайте ошибку - скорее всего, права доступа на папку
}
else
{
//формируете по своей логике URL файла. Например:
$url = '/images/users/image'.$id.'.'.$ext;
//Ну теперь и записываем его... куда его надо записать? Ну например:
$query="insert into userfiles(url,width,height) values('$url',".$info[0].",".$info[1].")";
mysqli_query($conn,$query);
}
}
}
Не в сети
Об такой пример кода глаза сломаешь, неужели нельзя нормально его отформатировать? Очень странное расположение { }, отсутствие пробелов, глобальные переменные, создание таблицы в момент загрузки (что значит лишние привилегии пользователю БД) и т.д.
Короче, хороший пример, как не надо писать на PHP. Аж почувствовал дыхание из рубежа 90-00.
Не в сети
Об такой пример кода глаза сломаешь, неужели нельзя нормально его отформатировать?
дело вкуса. Мне так нравится. Кому иначе нравится - недолго и отформатировать
создание таблицы в момент загрузки (что значит лишние привилегии пользователю БД)
Нет там создания таблицы в момент загрузки.
Есть комментарий, отражающий структуру таблицы.
Аж почувствовал дыхание из рубежа 90-00.
Дыхание просвещенных времен.
Не в сети
Уменьшил отступы - и сделал более понятный комментарий про таблицу:
//fieldName - имя input type="file"
if(isset($_FILES['fieldName'])) //Пришли данные из формы
if($_FILES['fieldName']['size'] > 0) //Файл закачался
{
//Изучим, что это нам закачали (getimagesize() - в ядре)
$info=getimagesize($_FILES['fieldName']['tmp_name']);
if($info === false) //Закачали НЕ изображение
{
//Обрабатываем ошибку
}
else
{
$ext = 'jpg'; //расширение файла
switch($info[2])
{
case IMG_GIF:
$ext = 'gif';
break;
case IMG_PNG:
$ext = 'png';
break;
case IMG_JPEG :
break;
default:
//Как-то реагируйте на то, что не веб-формат
break;
}
//$conn - это подключение к базе данных. Внутри метода надо будет написать
//global $conn;
//Нужно создать таблицув базе для того, чтоб делать уникальные имена файлам
//Вот её структура
//create table pictures(id int primary key auto_increment);
$query='insert into pictures() values()';
mysqli_query($conn,$query);
$id=mysqli_insert_id($conn);
//формируете по своей логике путь к файлу. Например:
$filename=__DIR__.'/../../images/users/image'.$id.'.'.$ext;
//Закачиваем файл
move_uploaded_file($_FILES['fieldName']['tmp_name'], $filename);
if(!file_exists($filename))
{
//Обрабатывайте ошибку - скорее всего, права доступа на папку
}
else
{
//формируете по своей логике URL файла. Например:
$url = '/images/users/image'.$id.'.'.$ext;
//Ну теперь и записываем его... куда его надо записать? Ну например:
$query="insert into userfiles(url,width,height) values('$url',".$info[0].",".$info[1].")";
mysqli_query($conn,$query);
}
}
}
Не в сети
- Дыхание просвещенных времен.
- Уменьшил отступы — и сделал более понятный комментарий про таблицу:
У меня скобки на том же уровне, что и вложенный блок, вызывают когнитивный диссонанс. Но это ладно. В коде мешанина из пробелов и табов — уж либо одно, либо другое. У меня длина таба выставлена в 2 символа, из-за чего форматирование расползается после вставки в редактор.
Ну не пишут так «просвещённые» люди. После запятых и if и switch нужны пробелы, между равно тоже. Иначе код write-only. Страшно подумать, как выглядит ваш проект.
// fieldName - имя input type="file"
if (isset($_FILES['fieldName'])) // Пришли данные из формы
{
if ($_FILES['fieldName']['size'] > 0) // Файл закачался
{
// Изучим, что это нам закачали (getimagesize() - в ядре)
$info = getimagesize($_FILES['fieldName']['tmp_name']);
if ($info === false) // Закачали НЕ изображение
{
// Обрабатываем ошибку
}
else
{
$ext = 'jpg'; // расширение файла
switch ($info[2])
{
case IMG_GIF:
$ext = 'gif';
break;
case IMG_PNG:
$ext = 'png';
break;
case IMG_JPEG:
break;
default:
// Как-то реагируйте на то, что не веб-формат
break;
}
// $conn - это подключение к базе данных. Внутри метода надо будет написать
// global $conn;
// Нужно создать таблицув базе для того, чтоб делать уникальные имена файлам
// Вот её структура
// create table pictures(id int primary key auto_increment);
$query = 'insert into pictures() values()';
mysqli_query($conn, $query);
$id = mysqli_insert_id($conn);
// формируете по своей логике путь к файлу. Например:
$filename = __DIR__.'/../../images/users/image'.$id.'.'.$ext;
// Закачиваем файл
move_uploaded_file($_FILES['fieldName']['tmp_name'], $filename);
if (!file_exists($filename))
{
// Обрабатывайте ошибку - скорее всего, права доступа на папку
}
else
{
// формируете по своей логике URL файла. Например:
$url = '/images/users/image'.$id.'.'.$ext;
// Ну теперь и записываем его... куда его надо записать? Ну например:
$query="insert into userfiles(url,width,height) values('$url',".$info[0].",".$info[1].")";
mysqli_query($conn,$query);
}
}
}
}
Не в сети
WordPress?
Нет. Времена, когда для уникальности внось создаваемого именир не использовали текущее время или генератор случайных чисел - как в примерах выше. Они у Вас когнитивного диссонанса не вызвали
У меня скобки на том же уровне, что и вложенный блок, вызывают когнитивный диссонанс.
Сочувствую.
В коде мешанина из пробелов и табов
Это не ко мне. Это к форуму, с которым я боролся, возможно, неумело. В моем редакторе все красиво.
После запятых и if и switch нужны пробелы, между равно тоже. Иначе код write-only.
Тут можете глумиться - это я перфокарты экономлю
По привычке.
Это Ваше замечания готов принять.
Страшно подумать, как выглядит ваш проект.
Но он работает - приятно удивляя быстродействием и надежностью. Уже шесть лет - в трех офисах. ERP большой фирмы.
Не в сети
- Времена, когда для уникальности внось создаваемого именир не использовали текущее время или генератор случайных чисел — как в примерах выше.
Я надеюсь, вы понимаете, что это говорит не в пользу этого времени, потому что проблемы предсказуемых идентификаторов очевидны.
- У меня скобки на том же уровне, что и вложенный блок, вызывают когнитивный диссонанс.
- Сочувствую.
Я не чураюсь индивидуального подхода к форматированию, но общепринятой практикой в известных мне языках считается располагать скобки на том же уровне, что и блок.
pascalprocedure X; begin Foo; end;
if (x) {
foo();
}
if (x)
{
foo();
}
Зачем сознательно идти против течения, если проект предполагает наличие других разработчиков?
- Это не ко мне. Это к форуму, с которым я боролся, возможно, неумело. В моем редакторе все красиво.
Форум совершенно не при чём. Раз используете табы (тоже экономия перфокарт?), то надо понимать проблемы, в частности что у каждого могут быть свои настройки их длины и что редактировать их за границами вашего любимого редактора (в браузере) будет проблемно. На что вы сами же напоролись.
- Но он работает — приятно удивляя быстродействием и надежностью. Уже шесть лет — в трех офисах. ERP большой фирмы.
Работающий код <> безопасный код и даже <> хороший код. Программы на 1С работают, но в большинстве случаев ужасны. Flash работает, но каждый год в нём находят десятки дыр (кстати, тоже продукт «просвещенного времени»). eBay работал до утечки и работает сейчас. Миллионные штрафы мало кого останавливают…
То, что у вас таких проблем не было может обозначать как качественно написанный код (в чём ваши фрагменты кода заставляют усомниться), так и отсутствие заинтересованных лиц в его, так сказать, разоблачении.
Не в сети