如何在使用Servlet下载文件时使用GWT?

11
我正在创建一个简单的项目,希望使用gwt上传和下载文件。但我在下载存储在服务器上的文件时遇到了问题。
对于文件上传,我使用了http://code.google.com/p/gwtupload/,并按照那里的说明进行操作。我的文件存储在网站容器之外的服务器上(硬盘上)。
现在,当涉及到文件的下载时,我希望用户按下下载按钮,当前选定的任何项都将被下载。但我不知道应该如何实现这一点。
我知道我需要一个下载servlet。
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();

}
}

目前我将只传递文件名字符串以检索文件进行测试。

现在我在客户端不知道该怎么做,我有一个简单的

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


}


}

上面是一个简单的小部件,它将提供一个面板,根据文件名允许下载文件。

正如您在上面所看到的,我不知道该怎么做才能下载文件。

有没有人可以指点我正确的方向?

1个回答

11
在客户端上,只需创建一个常规的<a href="path/to/servlet">标签。如果您想动态创建它,则可以使用Anchor类。当用户单击链接时,浏览器将自动下载文件。

好的,我可以使用锚点,但是如何将其链接到下载servlet,并且如何将文件名作为字符串传递给servlet呢? - molleman
2
每个servlet都有一个URL(在web.xml中指定的URL)。您只需要将该URL放入href属性中即可。此外,文件名可以作为URL参数传递,例如?filename=abcd.txt&otherParam=otherValue。在您的servlet中,您可以通过调用request.getParameter("filename")来获取文件名。 - Sripathi Krishnan
我能看一下你正在使用的web.xml文件和传递给Anchor的参数吗? - Nitish Upreti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接