2010-05-30 16 views
11

Tworzę prosty projekt, który pozwoli mi przesyłać i pobierać pliki przy użyciu gwt. Mam problem z pobieraniem plików znajdujących się na moim serwerze.Jak korzystać z GWT podczas pobierania plików za pomocą serwletu?

Do przesłania pliku użyłem http://code.google.com/p/gwtupload/ i postępowałem zgodnie z instrukcjami tam. Mój plik jest przechowywany na serwerze poza kontenerem witryny (na dysku twardym),

Teraz, gdy chodzi o pobieranie pliku, chcę, aby użytkownik nacisnął przycisk pobierania i cokolwiek jest aktualnie wybrane pobieranie. I naprawdę nie wiem jak to zrobić

wiem muszę pobrać aplet

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(); 

} 
} 

do chwili, kiedy będzie po prostu przekazać ciąg nazwę, aby pobrać plik do testowania

teraz jestem utracone, co zrobić po stronie klienta, mam proste

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); 


} 


} 

powyżej jest prosty widget, który dostarczy panel, który pozwoli na pobranie pliku w oparciu o Nazwa pliku

jak widać powyżej, nie wiem, co zrobić, aby móc pobrać plik

jest jakiś jeden, który może wskazać mi w dobrym kierunku?

Odpowiedz

11

Po stronie klienta utwórz zwykły tag <a href="path/to/servlet">. Możesz użyć klasy Anchor, jeśli chcesz ją dynamicznie utworzyć. Kiedy użytkownik kliknie link, przeglądarka automatycznie pobierze plik.

+0

OK, więc mogę użyć kotwicy, ale w jaki sposób powinienem połączyć to z serwletem pobierania i jak przekazać nazwę pliku jako ciąg do serwletu? – molleman

+2

Każdy serwlet ma adres URL (ten, który określasz w pliku web.xml). Trzeba tylko umieścić ten adres URL w atrybucie href. Ponadto nazwa pliku może być przekazana jako parametr adresu URL, taki jak "? Filename = abcd.txt i inneParam = inneValue". W swoim apletzie możesz pobrać nazwę pliku, wywołując 'request.getParameter (" filename ")' –

+1

dziękuję, sri, działa dobrze teraz – molleman

Powiązane problemy