【问题标题】:How to use GWT when downloading Files with a Servlet?使用 Servlet 下载文件时如何使用 GWT?
【发布时间】:2010-05-30 00:49:27
【问题描述】:

我正在创建一个简单的项目,它允许我使用 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);


}


}

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

正如您在上面看到的,我不知道如何才能下载文件

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

【问题讨论】:

    标签: java gwt servlets download


    【解决方案1】:

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

    【讨论】:

    • 好的,所以我可以使用锚点,但是我如何将它链接到下载的 servlet 以及如何将文件名作为字符串传递给 servlet?
    • 每个 servlet 都有一个 url(您在 web.xml 中指定的那个)。您只需将该 URL 放入 href 属性中。此外,文件名可以作为 URL 参数传递,例如 ?filename=abcd.txt&otherParam=otherValue。在您的 servlet 中,您可以通过调用 request.getParameter("filename") 来获取文件名
    • 我可以看看你使用的 web.xml 和你传递给 Anchor 的参数吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 2013-04-10
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 2014-07-07
    相关资源
    最近更新 更多