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.

Carga de archivos Front-End utilizando Vue y Winter Cms

Estoy tratando de subir imágenes desde un frontend de Vue a través de Illuminate/Http/Request a WinterCMS.
Vue encuentra el archivo y puedo imprimir en la consola el objeto File, pero no estoy seguro de cómo enviar esto a través de la API. Por ejemplo, he intentado:

public function saveImage(Request $req){
$images = $req->files('images');
}

lo cual no funciona, tampoco funciona:

public function saveImage(Request $req){
$images = $req['images'];
}

Estoy utilizando un controlador para manejar mis rutas, por ejemplo:

Route::post('/saveImage', 'Author\Project\Controllers\ProductControl@saveImage');

He agregado una relación attachOne al complemento como de costumbre y mi formulario tiene enctype=”multipart/form-data”.
He tenido este problema antes y lo solucioné convirtiendo las imágenes a base64, pero este proyecto tendrá bastantes imágenes y no quiero seguir por ese camino nuevamente.
Cualquier sugerencia será muy apreciada.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para cargar imágenes desde un frontend de Vue a través de Illuminate/Http/Request a WinterCMS, puedes intentar los siguientes pasos:

    1. En tu componente de Vue, asegúrate de haber establecido el atributo enctype del formulario como "multipart/form-data", de la siguiente manera:
    <form enctype="multipart/form-data">
      <!-- Tus campos del formulario aquí -->
      <input type="file" name="images">
      <button @click="uploadImage">Cargar imagen</button>
    </form>
    
    1. En tu método de Vue, puedes crear un nuevo objeto FormData y agregar los archivos seleccionados a él:
    uploadImage() {
      const formData = new FormData();
      formData.append('images', this.$refs.images.files[0]);
      // Puedes añadir otros campos del formulario aquí
    
      axios.post('/saveImage', formData).then(response => {
        // Maneja la respuesta aquí
      }).catch(error => {
        // Maneja el error aquí
      });
    }
    

    Ten en cuenta que this.$refs.images es una referencia al elemento de entrada de archivo. Puedes agregar otros campos del formulario al objeto formData mediante el método append.

    1. En tu controlador de WinterCMS, puedes recuperar el o los archivos cargados utilizando el método file o files del objeto Illuminate/Http/Request:
    public function saveImage(Request $request)
    {
      $image = $request->file('images');
      // O también:
      $images = $request->files('images');
    
      // Maneja el o los archivos cargados aquí
    }
    

    Asegúrate de haber añadido el atributo enctype="multipart/form-data" a tu elemento <form> en tu componente de Vue, ya que esto es necesario para las cargas de archivos.

    Además, asegúrate de haber definido la ruta correcta en el archivo de rutas de WinterCMS y de estar utilizando el método de controlador correcto. En este caso, la ruta debería ser:

    Route::post('/saveImage', 'Author\Project\Controllers\ProductControl@saveImage');
    

    ¡Espero que esto te sea de ayuda! Déjame saber si tienes alguna otra pregunta.

Comments are closed.