cargando un file a través de ajax con php

Me gustaría saber si es posible cargar un file binary a través de ajax y php, y tener un enlace para downloadlo. Me gustaría evitar actualizar toda la página, como con un formulario html estándar. Hasta ahora he estado usando formularios para get información, como radio y cuadros de text, y uso de javascript para anular el comportamiento pnetworkingeterminado. ¿Es posible algo similar para upload un file?

No es posible enviar un file a través de Javascript.

Tus opciones son:

  • El truco iframe oculto, popularizado por Google. Implementar esto usted mismo puede dar lugar a algunas cosas klunky por lo que hay bibliotecas, como jQuery , que tienen complementos, como Plugin Formulario popular de jQuery, que automatizan esto para que no tenga que sentirse sucio por dentro al usarlo.
  • Usando Flash para facilitar el process. En particular, SWFUpload es muy popular. En igualdad de condiciones, probablemente me vaya con la solución de Javascript sobre esto, pero he utilizado esto en el pasado con éxito. Lo bueno de esta solución es que viene con una interfaz más agradable, como indicadores de carga y miniaturas, etc. En este punto, sin embargo, está pidiendo que un usuario tenga Flash + Javascript disponible, lo que puede no funcionar en algunas situaciones.
  • Usar Silverlight en lugar de Flash, aunque realmente no lo consideraría una solución viable, ya que tiene una tasa de penetración mucho más baja que las otras dos soluciones.

Si bien no puede cargar un file a través de AJAX, puede colocar un control de file en una window emergente y luego actualizar la página que generó la window emergente cuando se cierra.

No tengo muy claro cómo actualizar la página que generó la window emergente, pero lo he visto hecho en el Conjunto de gestión de aprendizaje de ANGEL.

Tenga un IFrame (mostrar: ninguno) en su formulario y configure el objective de su formulario para que sea ese iframe.

Mi formulario se ve así:

 <iframe id="upload_target" name="upload_target" src="" style="width:0px;height:0px;border:0px solid #fff;"></iframe> <form enctype="multipart/form-data" name="frmXMLUpload" target="upload_target" action="scripts/uploadXML.php" method="POST" onSubmit="return checkExtension(fXMLFile.value, 'xml')"> <!--only allow up to 30k of data to be uploaded--> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> <input name="fXMLFile" id="fXMLFile" type="file" accept="text/xml" size="50" /> <p><input type="submit" value="Upload" /></p> </form> 

Y trata con la respuesta en tu IFRAME. Básicamente esto no es AJAX en absoluto, pero ¿a quién le gustaría que JavaScript tenga acceso a los files en su computadora local? Está bien como está.

En general, no es posible hacer esto solo en AJAX / Javascript.

Echa un vistazo a:

http://www.codeplex.com/SLFileUpload/

para una forma de hacerlo dentro de una aplicación Silverlight.

o:

http://www.element-it.com/Examples/MultiPowUpload/SimpleUpload.html

en flash.

Como dijo John Gietzen, no se puede hacer esto directamente a través de AJAX ( es decir, enviar los datos reales a través de AJAX). Sin embargo, lo que podría hacer es colocar su formulario en un iframe invisible, luego use AJAX para pedirle al server la URL. Eso retendría la experiencia básica del usuario, no refrescando la página.

¿Has considerado jquery? Hay buenos complementos para hacer esto con gracia.

Como este, por ejemplo: http://www.phpletter.com/Our-Projects/AjaxFileUpload/

Eche un vistazo a este ejemplo, el plugin es un poco mejor que el de phpLetter, aunque el phpLetter podría tener mejores ejemplos para PHP.

http://www.fyneworks.com/jquery/multiple-file-upload/#tab-Examples

Es posible que también desee echarle un vistazo a SwfUploader , que carga los files con Flash, mostrando una barra de progreso y sin necesidad de actualizar la página. Las demostraciones se pueden ver aquí .