none
enviar imágenes al controlador mediante $.ajax post RRS feed

  • Pregunta

  • hola amigos, estoy trabajando en mi tesis y desde hace días tengo un problema que me es dificil de resolver:
    estoy enviando a mi controlador un formData que contiene, entre otros datos, una imajen; lo hago mediante la función $.ajax, pero al contolador la imagen no me llega. anexo el codigo que estoy usando y espero me puedan ayudar... muchas gracias de antemano.
    var frmData = new FormData();
    frmData.append("modelPregunta.ponderacion", ponderacion);
    frmData.append("modelPregunta.indicaciones", 
    $("#indicaciones").val());
    frmData.append("modelPregunta.idDestreza", 
    $("#destre").val());
    frmData.append("modelPregunta.idTipo", 
    $("#dDLTipoAct").val());
    frmData.append("probar", $("#extraIma").val()); //este campo es el de la imajen
    frmData.append("modelListaRespuesta", listasRes);
    $.ajax({
    url: "/Docente/obtPre",
    type: 'POST',
    data: frmData,
    contentType: false,
    processData: false,
    success: function (data) { } 
    });


    miércoles, 15 de marzo de 2017 17:17

Todas las respuestas

  • frmData.append("probar", $("#extraIma").val()); //este campo es el de la imajen

    El método val() de jQuery devuelve el texto de un control <input>, así que no puede ser una imagen.

    ¿Qué es es exactamente lo que quieres recuperar? ¿A qué té te refiere con "una imagen" en este contexto, o donde tienes esa imagen guardada y de qué manera?

    miércoles, 15 de marzo de 2017 23:35
  • hola

    aconsejaria evalues

    jquery.fileDownload

    ya que el archivo se tiene que subir por multipart

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 16 de marzo de 2017 3:47
  • hola, la imagen la cargo con <input type="file" id="extraIma" accept="image/*" onchange="readUrl(this);" /> y de hay la quiero enviar al controlador para que se guarde en X carpeta y su url en la bd. el campo "probar" esta definido como tipo HttpPostedFileBase en el controlador.
    jueves, 16 de marzo de 2017 5:08
  • hola, la imagen la cargo con <input type="file" [...]> [...] "probar" esta definido como tipo HttpPostedFileBase en el controlador.

    Ah, no. Así no puede funcionar. Si usas el val() de jQuery, te devuelve el texto escrito en el input, no te devuelve los bytes de ese fichero.

    Normalmente el HttpPostedFileBase se usa cuando el <input type="file"> está dentro de un <Form> configurado como "multipart" y se hace un Submit del Form. Entonces el contenido del archivo se envía al target del Form codificado dentro del Multipart, y el HttpPostedFileBase sabe decodificarlo y te devuelve el contenido y la información sobre el archivo.

    Pero si lo quieres enviar con el $.ajax, entonces tienes que ensamblar tú el contenido del POST. Eso implica que tienes que escribir código javascript para leer los bytes del archivo en lado cliente, y luego ensamblar el "data" incorporando esos bytes (en lugar de meter en el data solo el nombre del archivo, como haces ahora).

    jueves, 16 de marzo de 2017 7:16
  • hola amigo. antes que nada, gracias por responderme... comento que ya pude resolver mi problema.

    pasaba que tal como tu decías, val() solo me recogía el texto. la solución fue especificar que tenia que recoger un archivo, así:

    frmData.append("probar", document.getElementById("extraIma").files[0])

    y ahí ya pude enviar la imagen al controlador 

    jueves, 16 de marzo de 2017 17:20
  • Muchas gracias funciona perfectamente.

    tambien se puede enviar el form de una sola vez, es decir sin armar el formdata

    var formData1 = new FormData($('#formPrueba')[0]);

    miércoles, 7 de marzo de 2018 14:55