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.

Tengo un problema con la carga de imágenes en Laravel.

¿Alguien puede ayudarme? Quiero agregar un artículo con una imagen. La imagen ha ingresado correctamente en el directorio pero en la base de datos siempre aparece el nombre D:\xampp\tmp\php……tmp.

He cambiado el archivo del sistema a público.

Controlador

public function store(Request $request)
{
    $validateData = $request->validate([
        'title' => 'required|max:255',
        'thumbnail' => 'image|file|max:8192',
        'slug' => 'required',
        'description' => 'required',
    ]);
    if ($request->file('thumbnail')) {
        $imageName = time().'.'.$request->file('thumbnail')->getClientOriginalExtension();
        $validatedData['thumbnail'] = $request->thumbnail->move(public_path('uploads/article/'), $imageName);
    }

    Article::create($validateData);
    return redirect('/admin-article')->with('success', 'Los datos se han agregado correctamente');
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema de que el nombre de la imagen se esté almacenando como “D:\xampp\tmp\php……tmp” en la base de datos se debe probablemente al hecho de que se está utilizando la ruta del archivo temporal en lugar de la ruta real del archivo.

    En el código del controlador, se está utilizando la función move() para mover el archivo subido al directorio uploads/article/. Sin embargo, no se está actualizando el array $validatedData con el nombre real del archivo.

    Para solucionar este problema, debes actualizar la siguiente línea de código:

    $validatedData['thumbnail'] = $request->thumbnail->move(public_path('uploads/article/'), $imageName);
    

    a:

    $validatedData['thumbnail'] = 'uploads/article/'.$imageName;
    

    Esto garantizará que se almacene en la base de datos la ruta real del archivo de imagen en lugar de la ruta del archivo temporal.

Comments are closed.