Foros del Web » Programando para Internet » PHP » Symfony »

[SOLUCIONADO] Subir Imagen(archivo) con Ajax Jquery y usarlo en Symfony2

Estas en el tema de Subir Imagen(archivo) con Ajax Jquery y usarlo en Symfony2 en el foro de Symfony en Foros del Web. Buenas, necesito poder mandar varios campos de un formulario incluido uno de tipo "file" por ajax para luego poder guardar los datos en la base ...
  #1 (permalink)  
Antiguo 21/01/2016, 05:06
 
Fecha de Ingreso: abril-2015
Mensajes: 11
Antigüedad: 9 años, 7 meses
Puntos: 0
Subir Imagen(archivo) con Ajax Jquery y usarlo en Symfony2

Buenas, necesito poder mandar varios campos de un formulario incluido uno de tipo "file" por ajax para luego poder guardar los datos en la base de datos con Symfony2. Lo hice sin petición ajax siguiendo esta documentación:"http://symfony.com/doc/2.3/cookbook/controller/upload_file.html" y se guarda correctamente todo, pero a la hora de querer hacerlo por ajax tengo problema con el campo "file" y por más que busco en la web sólo se habla de FormData, pero no sé usarlo ni mandarlo junto con mis otros datos y tampoco sé cómo usarlo luego en el controlador para que funcione mi código.

El código que uso es el siguiente:

Controlador:

Código PHP:
   public function createAction(Request $request)
    {        
        if (
$request->isXmlHttpRequest() && !$request->isMethod('POST')) {
        throw new 
HttpException('XMLHttpRequests/AJAX calls must be POSTed');
        }
        
        
$entity = new Student();
        
$form $this->createCreateForm($entity);
        
$form->handleRequest($request);

        if (
$form->isValid()) {
           
$file $entity->getPhoto();

           
$fileName md5(uniqid()).'.'.$file->guessExtension();

           
$photoDir $this->container->getParameter('kernel.root_dir').'/../web/uploads/images';

           
$file->move($photoDir$fileName);

           
$entity->setPhoto($fileName);

           
$em $this->getDoctrine()->getManager();
           
$em->persist($entity);
           
$em->flush();

           if (
$request->isXmlHttpRequest()) {
                return new 
JsonResponse(array('message' => 'Success!','success' => true), 200);
            }

            if (
$request->isMethod('POST')) {
            return new 
JsonResponse(array('message' => 'Invalid form','success' => false), 400);
        }
   
          return 
$this->redirect($this->generateUrl('student_show', array('id' => $entity->getId())));
        }
        return 
$this->render('BackendBundle:Student:new.html.twig', array(
            
'entity' => $entity,
            
'form'   => $form->createView(),
        ));
    } 
Entidad:

Código PHP:
     use DoctrineORMMapping as ORM;
       use 
SymfonyComponentValidatorConstraints as Assert;

       
//...
       /**
       * @var string
       *
       * @ORM\Column(name="photo", type="string", length=255, nullable=true)
       * @Assert\File(mimeTypes={ "image/png","image/jpg" })
       */
       
private $photo;

  
       public function 
setPhoto($photo)
       {
        
$this->photo $photo;

        return 
$this;
       }
    
       public function 
getPhoto()
       {
        return 
$this->photo;
       } 
Formtype:

Código PHP:
    //...
       
       
->add('photo''file', array('required' => false))
      
       
//... 
Javascript:

Código PHP:
  //...

    
$('.form_student').on("submit",function(event) {
     
event.preventDefault();

     $.
ajax({
      
type'POST',
      
urlRouting.generate('student_create'),
      
data: $(this).serialize(),
      
dataType'json',
     
      
success: function(response) {

       
alert(response.message);
      },
      
error: function (responsedescerr){
          if (
response.responseJSON && response.responseJSON.message) {
             
alert(response.responseJSON.message);
          }
          else{
             
alert(desc);
          }
      }
     });
    }); 

Última edición por JMMS; 21/01/2016 a las 06:06 Razón: añadido url de la documentación
  #2 (permalink)  
Antiguo 21/01/2016, 08:34
 
Fecha de Ingreso: abril-2015
Mensajes: 11
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: Subir Imagen(archivo) con Ajax Jquery y usarlo en Symfony2

Lo acabo de solucionar con estos cambios:

-
Código PHP:
data: new FormData($(this)[0]) 
en lugar de
Código PHP:
data: $ (this).serialize() 
Y añadiendo en la petición ajax:

Código PHP:
 processDatafalse,
      
contentTypefalse,
      
cachefalse
  #3 (permalink)  
Antiguo 18/04/2016, 03:57
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 10 meses
Puntos: 32
Respuesta: Subir Imagen(archivo) con Ajax Jquery y usarlo en Symfony2

Llevo más de dos horas con esto y en el request no aparece el formulario.

Código TWIG:
Ver original
  1. <div id="add-file">
  2.     <form id="form-file" action="{{ path('panel_archivos_add') }}" enctype="multipart/form-data" method="post">
  3.         <input id="fileupload" type="file" name="fichero"/>
  4.         <input type="hidden" name="subcarpeta" value=""/>
  5.         <input type="hidden" name="id_usuario" value=""/>
  6.         <input type="submit"></input>
  7.     </form>
  8. </div>
  9.    
  10. <script>
  11.    
  12.       $('#form-file').submit(function(event){
  13.            
  14.             event.preventDefault();
  15.  
  16.             $.ajax({
  17.  
  18.                     error:      function(jqXHR, textStatus, errorThrown){},
  19.                     data:       {
  20.                                     datos: new FormData($(this)[0])
  21.                                 },
  22.                     success:    function(data, textStatus, jqXHR)
  23.                                 {
  24.                                     console.log(data);
  25.                                 },
  26.                     url:        "{{ path('panel_archivos_add') }}",
  27.                     method:     "POST",
  28.                     processData: false,
  29.                     contentType: false,
  30.                     cache: false
  31.                 }
  32.             );
  33.         });
  34.  
  35. </script>

Si pongo esto, tampoco...

Código TWIG:
Ver original
  1. contentType: "multipart/form-data"

Etiquetas: ajax, jquery, php, symfony2
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:57.