Para enviar un archivo por medio de Ajax en realidad es muy fácil, sobre todo con la función Ajax de jquery, para ello lo demuestro a continuación:
Primero tenemos el código html siguiente, el cual tiene un formulario con un campo de texto y un input file, es importante que el atributo del form enctype sea multipart/form-data, si no es asi no se enviara el archivo.
<form id="frmFormulario" enctype="multipart/form-data"> <input type="text" name="uncampo"> <input type="file" name="archivo"> <input type="submit" value="Enviar"> </form>
Ahora tenemos que seleccionar(selectores de jquery) el formulario para que haga el envió por Ajax (Ver: ¿Cómo hacer una petición Ajax por medio de submit?) y para ello utilizo el siguiente código en javascript el cual esta comentado a detalle:
$(document).ready(function () { //sobreescribimos el metodo submit para que envie la solicitud por ajax $("#frmFormulario").submit(function (e) { //esto evita que se haga la petición común, es decir evita que se refresque la pagina e.preventDefault(); //ruta la cual recibira nuestro archivo url="@Url.Content("~/Archivo/Recibe")" //FormData es necesario para el envio de archivo, //y de la siguiente manera capturamos todos los elementos del formulario var parametros=new FormData($(this)[0]) //realizamos la petición ajax con la función de jquery $.ajax({ type: "POST", url: url, data: parametros, contentType: false, //importante enviar este parametro en false processData: false, //importante enviar este parametro en false success: function (data) { alert("Se capturo el archivo con éxito") }, error: function (r) { alert("Error del servidor"); } }); }) })
Y este es el trabajo que se hace en el front-end, ahora solo queda hacer el método en el back-end el cual capture el archivo y lo guarde o realice la acción deseada con el fichero; por ejemplo en Mvc.Net seria de la siguiente manera:
//controlador de mvc.net public class Archivo : Controller{ public ActionResult Recibe(string uncampo, HttpPostedFileBase archivo) { //aqui va el codigo que deseemos para manipular el archivo } }
Y así de fácil se envía un archivo por medio de Ajax. Dudas o comentarios pueden hacérmelos llegar y yo les respondo en breve.