2010-05-30 11 views
11

Estoy creando un proyecto simple que me permitirá cargar y descargar archivos usando gwt. Tengo problemas con la descarga de archivos que están en mi servidor.¿Cómo usar GWT al descargar archivos con un servlet?

Para la carga de archivos utilicé http://code.google.com/p/gwtupload/ y seguí las instrucciones allí. Mi archivo está almacenado en el servidor fuera del contenedor del sitio web (en el disco duro),

Ahora cuando se trata de la descarga de un archivo, quiero que el usuario presione un botón de descarga y cualquier elemento que esté seleccionado se descargar. Realmente no sé cómo esto se hará

Sé que necesito un servlet descarga

public class DownloadAttachmentServlet extends HttpServlet { 

@Override 
protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
     throws ServletException, IOException { 
    // TODO Auto-generated method stub 
    super.doGet(req, resp); 
} 

@Override 
protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
     throws ServletException, IOException { 

    String fileName = (String) req.getSession().getAttribute("fileName"); 

    YFUser user = (YFUser) req.getSession().getAttribute(TestServiceImpl.SESSION_USER); 
    if (user == null) 
     throw new ServletException("Invalid Session"); 

    InputStream in = null; 
    OutputStream out = resp.getOutputStream(); 

    FileInputStream fIn = new FileInputStream(fileName); 
    byte[] buffer = new byte[4096]; 
    int length; 
    while ((length = in.read(buffer)) > 0){ 
     out.write(buffer, 0, length); 
    } 
    in.close(); 
    out.flush(); 

} 
} 

por el momento yo sólo voy a pasar una cadena de nombre de archivo para recuperar el archivo para probar

ahora estoy perdido en lo que debe hacer en el lado del cliente, tengo una sencilla

public class DownloadFilePanel extends Composite { 


public DownloadFilePanel(final YFUser user , final String fileName){ 

    final Element downloadIframe = RootPanel.get("__download").getElement(); 

    VerticalPanel content = new VerticalPanel(); 
    content.add(new Label("Download For this File : " + fileName)); 

    Button button = new Button("Download"); 
    button.addClickHandler(new ClickHandler(){ 
     @Override 
     public void onClick(ClickEvent event) { 
      // i do not know what to do here 
    }); 
      content.add(button); 
    initWidget(content); 


} 


} 

anterior es un simple widget que proporcionará un panel que permitirá la descarga de un archivo basado en un nombre de archivo

como se puede ver arriba, no sé qué hacer para ser capaz de descargar el archivo

¿hay alguien que me puede apuntar en la dirección correcta?

Respuesta

11

En el lado del cliente, simplemente cree una etiqueta <a href="path/to/servlet"> normal. Puede usar la clase Anchor si desea crearla dinámicamente. Cuando el usuario hace clic en el enlace, el navegador descargará automáticamente el archivo.

+0

OK, así que puedo usar un ancla, pero ¿cómo podría vincular esto con el servlet de descarga y cómo también pasaría el nombre del archivo como una cadena al servlet? – molleman

+2

Cada servlet tiene una url (la que especifique en su web.xml). Solo necesita poner esa URL en el atributo 'href'. Además, el nombre del archivo se puede pasar como un parámetro de URL como '? Filename = abcd.txt & otherParam = otherValue'. En su servlet, puede obtener el nombre del archivo llamando 'request.getParameter (" filename ")' –

+1

gracias sri, funciona bien ahora – molleman

Cuestiones relacionadas