Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Здравствуйте,
Реализовал загрузку картинки на сервер.
public function store(Article $postModel, ArticlesAddRequest $request)
{
$postModel->create($request->all());
$file = $request->file('image_file');
$filename = $file->getClientOriginalName();
$file->move('../images', $filename);//папка
return redirect()->route('articles');
}
Как сделать чтобы имя картинки также записывалось в БАЗУ?
Открываю для себя Laravel. Как бы не закрыть.
Не в сети
Зачем? ФС лучше подходит для хранения статики, БД в большинстве случаев менее походит для хранения больших строк и раздавать файлы нужно будет через скрипт, который предварительно будет вытаскивать файлы из БД, что создаст ненужную нагрузку. А если скриптом кэшировать файлы на диск, то зачем тогда хранить их в БД?
Не в сети
Как сделать чтобы имя картинки также записывалось в БАЗУ?
Вы, батенька, страшный человек... :-)
Вот мой "грязный" код. Поле 'avatar', естественно, должно быть в таблице.
public function update(Request $request, $id) {
$this->validate($request, [
'name' => 'required|max:100',
'sex' => 'required|in:мужской,женский',
'avatar' => 'mimes:jpeg,jpg,png,gif|max:1000'
]);
try {
$avatar_path = '';
if (Input::hasFile('avatar')) {
$file = Input::file('avatar');
$extension = $file->getClientOriginalExtension();
$filepath = public_path() . '/assets/img/users/' . $id . '/';
$filename = 'ava' . $id . '.' . $extension;
$avatar_path = asset('assets/img/users/' . $id . '/' . $filename);
$file->move($filepath, $filename);
}
if ($avatar_path) {
$user = User::find($id);
$user->name = $request->name;
$user->sex = $request->sex;
$user->avatar = $avatar_path;
$user->save();
} else {
$user = User::find($id);
$user->name = $request->name;
$user->sex = $request->sex;
$user->save();
}
return Redirect::back(301)
->with('success', 'Данные успешно обновлены');
} catch (Exception $e) {
return Redirect::back()
->with('error', $e->getMessage());
}
}
Только не спрашивайте больше, тут все ясно более чем. Даже, возможно, лучше сделаете.
Изменено Androbim (15.11.2016 10:34:21)
Не в сети
Зачем? ФС лучше подходит для хранения статики, БД в большинстве случаев менее походит для хранения больших строк и раздавать файлы нужно будет через скрипт, который предварительно будет вытаскивать файлы из БД, что создаст ненужную нагрузку. А если скриптом кэшировать файлы на диск, то зачем тогда хранить их в БД?
Опа... Так он же спросил про имя, а не BLOB заливать... А как еще можно сделать?
Изменено Androbim (15.11.2016 10:33:25)
Не в сети
Не в сети
имя для файла бери либо $file->getName()
либо сделай генератор таких имён вида md5(time().$file->getName().time())
лучше генератор, чтобы не "личили"
Не в сети
Спасибо!
Не в сети
Не в сети
}%> либо сделай генератор таких имён вида md5(time().$file->getName().time())
С точки зрения энтропии наличие двух time() ничем не лучше одного. В дополнение к time() лучше использовать секретную фразу, типа того ключа, который Laravel генерирует при установке.
Это не сточки зрения энтропии, а с точки зрения удлинения стринга средствами не требующими создания утилит-их генерящих )))
Не в сети
Не в сети
}%> Это не сточки зрения энтропии, а с точки зрения удлинения стринга
Ну так длина хэша одинакова и не зависит от длины строки на входе.
так я не о свойстве хеша, а его сугубо вариативности
Не в сети
Только не спрашивайте больше, тут все ясно более чем. Даже, возможно, лучше сделаете.
У меня нет $id я не могу обратиться к модели.
Я пока делаю для формы создания статьи.
public function store(Article $postModel, ArticlesAddRequest $request)
{
$postModel->create($request->all());
$file = $request->file('image_file');
$filename = $file->getClientOriginalName();
$file->move('../images', $filename);
return redirect()->route('articles');
}
Открываю для себя 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');
}
Изменено Mick_20 (16.11.2016 09:40:45)
Открываю для себя Laravel. Как бы не закрыть.
Не в сети
Ну вот, а я только-только хотел написать, что не собираюсь за Вас текучку выполнять :-)
Не в сети
Страницы 1