¿Puedo enviar un archivo como multiparte por XMLHttpRequest
a un servlet? Estoy elaborando un formulario y presentándolo como multiparte, pero de alguna manera no recibo una respuesta por cargarlo con éxito. No quiero que la página se actualice, por lo que tiene que llevarse a cabo por ajax.Enviar un archivo como multiparte a través de xmlHttpRequest
Respuesta
Eso solo es posible con XHR FormData
API (anteriormente conocido como "XHR2" o "XHR Nivel 2", actualmente conocido como "Funciones avanzadas XHR").
Teniendo en cuenta este código HTML,
<input type="file" id="myFileField" name="myFile" />
puede subirlo a continuación:
var formData = new FormData();
formData.append("myFile", document.getElementById("myFileField").files[0]);
var xhr = new XMLHttpRequest();
xhr.open("POST", "myServletUrl");
xhr.send(formData);
XHR cuidará sobre los encabezados apropiados y solicitud cuerpo codificación y el archivo será en este ejemplo estará disponible en el lado del servidor como form-data
parte con el nombre myFile
.
Debe tener en cuenta que FormData
API no es compatible con navegadores más antiguos. En caniuse.com puedes ver que actualmente está implementado en Chrome 7+, Firefox 3.5+, Safari 5+, IE 10+ y Opera 12+.
Una alternativa es usar el jQuery Form plugin. Su forma entera, cuando se escribe y funciona correctamente sin ninguna línea de código JavaScript, entonces inmediatamente se Ajaxified con sólo la línea siguiente:
$("#formId").ajaxForm(function(response) {
// Handle ajax response here.
});
También soporta la carga de archivos a su vez por un truco iframe oculto. Vea también this jQuery Form documentation para una explicación en profundidad. Es posible que solo necesite cambiar el código del servlet para poder interceptar las solicitudes normales (sincrónicas) y ajax (asincrónicas). Véase también la respuesta de un ejemplo concreto: Simple calculator with JSP/Servlet and Ajax
De cualquier manera, el archivo cargado debe entonces estar disponibles en el método de un servlet @MultipartConfig
doPost()
de la siguiente manera:
Part myFile = request.getPart("myFile");
o si está todavía en Servlet 2.5 o mayor, use Apache Commons FileUpload de la forma habitual. Vea también esta respuesta para un ejemplo concreto: How to upload files to server using JSP/Servlet?
¿Y qué pasa si en nuestra página generamos automáticamente muchos archivos de entrada? podemos generar identificaciones? – walox
No es posible enviar multipart/form-data
con xhr (actualización. aunque es posible en los navegadores modernos, con XHR2
Véase la respuesta de BalusC).
Una forma común de lograrlo es usar un form
normal, pero en su lugar iframe
. De esta manera, solo el iframe
se actualiza al cargarlo.
En realidad quiero una respuesta si el archivo se carga o no. Además, quiero la ubicación donde se carga la imagen. –
Tejasva: observe el ejemplo de Napolux, que especifica cómo puede llamar a una función js en la ventana principal cuando se completa la carga. También podría proporcionar la ubicación de la imagen. –
@LinusGThiel Es posible. Ver la respuesta de BalusC. –
- 1. ¿Cómo enviar datos de formularios multiparte binarios como base64?
- 2. Enviar un archivo a través de sockets en Python
- 3. ¿Cómo enviar arraybuffer como binario a través de Websocket?
- 4. ¿Cómo enviar mensajes MIME multiparte en C#?
- 5. JavaScript webworker no cargará archivos XML a través de XMLHttpRequest
- 6. Descargar datos binarios como un archivo a través de Javascript
- 7. encabezados personalizados a través de html formulario enviar
- 8. Cómo enviar matrices usando XMLHttpRequest al servidor
- 9. Enviar un hash de ubicación a través de un referente
- 10. Enviar datos JSON a PHP utilizando XMLHttpRequest sin jQuery
- 11. Enviar archivo cargado como archivo adjunto
- 12. Enviar un archivo como archivo adjunto en el objetivo c
- 13. Enviar salida ELMAH a través de NLog
- 14. Cómo enviar objetos Json (o datos de cadenas) desde Javascript xmlhttprequest a MVC Controller
- 15. ¿Cómo puedo ENVIAR una solicitud HTTP multiparte de Perl a Java y obtener una respuesta?
- 16. cómo enviar un correo electrónico a través de mailx con el archivo adjunto
- 17. Enviar SMS a través de IP
- 18. enviar SMS a través de SMPP
- 19. cómo enviar un int a través de UDP en Java
- 20. ¿Cómo puedo enviar el carácter "&" (ampersand) a través de AJAX?
- 21. C# enviar imagen a través de HTTP
- 22. enviar un mensaje de texto a través de .net
- 23. ¿Cómo enviar un retorno de carro a través de telnet?
- 24. jQuery, ¿enviar contraseña a través de ajax?
- 25. ¿Cómo usar sendmsg() para enviar un descriptor de archivo a través de sockets entre 2 procesos?
- 26. ¿Cuál es la mejor manera de enviar un archivo a través de una red usando C#?
- 27. Cómo enviar NSString a través de un socket usando NSOutputStream
- 28. un error al enviar aplicación a través de XCode
- 29. Enviar un mensaje a través de XMPPFramework para iOS
- 30. Generando límite multiparte
Vea también: [Enviar imágenes desde elementos de Canvas usando Ajax y PHP $ _FILES] (http://stackoverflow.com/a/5303242/938089?sending-images-from- canvas-elements-using-ajax-and-php-files) –