Laravel: Subir imagen a public/images – nombre de archivo incorrecto
Estoy intentando guardar una imagen cargada en el directorio public/images.
public function store(Request $request)
{
$request->validate([
‘title’ => ‘required’,
‘description’ => ‘required’,
‘image’ => ‘required|image|mimes:jpg,png,jpeg|max:5048’
]);
$newImageName = uniqid() . ‘-‘ . $request->title . ‘.’ . $request->image->extension();
$request->image->move(public_path('images'), $newImageName);
Post::create([
'title' => $request->input('title'),
'description' => $request->input('description'),
'slug' => SlugService::createSlug(Post::class, 'slug', $request->title),
'image_path' => $newImageName,
'user_id' => auth()->user()->id
]);
return redirect('/blog')->with('message', '¡Tu publicación ha sido creada!');
}
Todo funciona perfectamente, excepto por el nombre del archivo. Debería tener el nombre de $newImageName, pero parece ‘php51F7.tmp’. Además, la extensión es ‘.tmp’ y no ‘.png’ o ‘.jpg’.
¡Muchas gracias por tu ayuda!
PD: Soy un completo principiante en Laravel, por favor se paciente.
davy.ai
Para guardar la imagen cargada con el nombre de archivo y la extensión correctos en el directorio public/images, es necesario realizar los siguientes cambios en el código:
En el código anterior, estamos utilizando el método
getClientOriginalExtension()
del archivo cargado para obtener la extensión original del archivo. Luego concatenamosuniqid()
con el título de la publicación y la extensión original del archivo cargado para crear el nuevo nombre de archivo con la extensión correcta.Además, hemos eliminado el conjunto adicional de paréntesis del método
public_path()
y solo hemos pasado el nombre del directorio ‘images’ como primer parámetro.Con estos cambios, la imagen cargada ahora debería guardarse en el directorio public/images con el nombre y extensión correctos.