У меня есть следующая проблема:
Путь к изображению сохраняется в БД, но фактический файл в папке «Хранилище» имеет полное другое имя, и я не могу найти способ извлечь его для отображения в виде:
публичная функция savePicture (Запрос $ request) {
if($request->hasFile('image')) {
$image_name = $request->file('image')->getClientOriginalName();
$image_path = $request->file('image')->store('public');
$image = Image::make(Storage::get($image_path))->resize(320,240)->encode();
Storage::put($image_path,$image);
$image_path = explode('/',$image_path);
$user_id = $request->input('user_id');
$user = User::find(Auth::user()->id);
$user->image = Storage::url($image_name);
$user->save();
return back();
} else{
return "No file selected";
}
Это запрос для получения пути, но он не может заставить его работать, потому что его объект и $ pic-> image не работают в поле зрения.
$imagen = DB::table('users')
->select('image')
->where('id', '=', Auth::user()->id);
return view('/tablero', [
'posts' => $posts,
'pic' => $image,
]);
Моя база данных выглядит как
изображение: /storage/name.png
Но в моей папке Storage я получаю d7f7r87RmMy4NtCFvbJ8sQeutfC5wtsiak7GZXcn.png
Я пробовал разные способы отображения изображения, но оно не работает. Что мне не хватает?
Вы сохраняете файл в базе данных, используя исходное имя файла, но сохраняете его в каталоге хранения под именем, которое возвращается вам методом store. Так что вы могли бы сделать
$user->image = $image_path;
вместо
$user->image = Storage::url($image_name);
ИЛИ, если вы хотите сохранить оригинальное имя файла в БД и в хранилище, вы можете сделать
Storage::put($image_name, $image);
$user->image = Storage::url($image_name);
Вам не нужно добавлять $ image_name к пути.
то есть
$image_path = $image_path . '/'. $image_name;
Прежде чем сделать
Storage::put($image_path,$image);
Используя метод store (), Laravel генерирует случайное имя для файла. Вам следует использовать метод storeAs (), который позволяет указать имя, под которым вы хотите сохранить файл.
$image_name = $request->file('image')->getClientOriginalName();
$image_path = $request->file('image')->storeAs('path/to/storage', $image_name);