es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , , ,

Answer

  1. Avatar for 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:

    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->getClientOriginalExtension();
    
        $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.');
    }
    

    En el código anterior, estamos utilizando el método getClientOriginalExtension() del archivo cargado para obtener la extensión original del archivo. Luego concatenamos uniqid() 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.

Comments are closed.