Как использовать GWT при загрузке файлов с помощью сервлета?

Я создаю простой проект, который позволит мне загружать и скачивать файлы с помощью gwt. У меня возникли проблемы с загрузкой файлов, которые находятся на моем сервере.

Для загрузки файла я использовал http://code.google.com/p/gwtupload/ и следил за инструкциями. Мой файл хранится на сервере за пределами контейнера веб-сайта (на жестком диске),

Теперь, когда дело доходит до загрузки файла, я хочу, чтобы пользователь нажал кнопку загрузки, и любой выбранный элемент будет загружен. я действительно не знаю, как это будет сделано

Я знаю, что мне нужен сервлет загрузки

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

}
}

на данный момент я просто передаю строку fileName для извлечения файла для тестирования

теперь я теряюсь в том, что делать на стороне клиента, у меня есть простой

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


}


}

выше - простой виджет, который будет поставлять панель, которая позволит загружать файл на основе fileName

как вы можете видеть выше, я не знаю, что делать, чтобы загрузить файл

есть ли кто-нибудь, который может указать мне в правильном направлении?

Ответ 1

На стороне клиента просто создайте обычный тег <a href="path/to/servlet">. Вы можете использовать класс Anchor, если хотите его динамически создать. Когда пользователь нажимает на ссылку, браузер автоматически загрузит файл.