2011-04-22 14 views
5

Uso ExtJS para compilar el lado del cliente para mi programa. Hay una situación en la que deseo enviar una solicitud de Ajax al servidor y obtener el archivo de respuesta (archivo binario, no archivo de texto plano, es decir, XLS o PDF). ¿Cómo puedo obtener ese archivo devuelto por ExtJS (me refiero a que el archivo se puede descargar y almacenar en el cliente)? No puedo usar var result = Ext.decode(response.responseText) para recibir el resultado porque la respuesta contiene datos binarios y no se puede decodificar.Obtener archivo de respuesta use ExtJS

La llamada Ajax es muy simple:

Ext.Ajax.request({ 
    url : 'myController/exportFile', 
    method : 'GET', 
    success : function(response, opts) { 
     // What should I do to get the file? 
    }, 
    failure : function(response, opts) { 
     alert('Export file failed!') 
    } 
}); 

Aquí es mi acción del servidor de archivos para volver:

public void sendFile(HttpServletResponse response, String filePath) { 
     def file = new File(filePath); 
     response.setContentType("application/octet-stream"); 
     response.setHeader("Content-disposition", "attachment;filename=${file.getName()}");  
     response.outputStream << file.newInputStream(); 
    } 

Muchas gracias!

Respuesta

2

Si necesita que se le solicite al usuario con el típico cuadro de diálogo de abrir/guardar proporcionado por el navegador, no necesita hacer esta llamada AJAX.

Acaba de vincular a myController/exportFile de su página debe ser suficiente.
p. <a href="myController/exportFile">my file</a>

Para este enfoque de trabajo, la respuesta HTTP de myController/exportFile debe incluir los encabezados apropiados (a saber, tipo de contenido y disposición de contenido) que indiquen al navegador "esto es archivo .Abra abrir/guardar diálogo" y en función de su fragmento, veo que ya tienes esto cuidado.

+0

¡Excelente respuesta! Eress el mejor !! ¡He buscado este largo tiempo y solo esta publicación me ha dado la respuesta correcta! – davs

+0

@amol puede ayudarme [aquí] (http://stackoverflow.com/questions/8505995/itextsharp-generated-pdf-how-to-prompt-a-user-to- choose-where-to-save) – Armance

0

Puede guardar el archivo de sistema de archivos del servidor y enviar window.open ('http: //your.domain/your/file') al lado del cliente ... donde http://your.domain/your/file -link para presentar

+0

window.open perderá el control de cualquier gestión de errores, no todos los clientes del navegador permiten window.open –

Cuestiones relacionadas