【问题标题】:file download using RequestBuilder of gwt使用 gwt 的 RequestBuilder 下载文件
【发布时间】:2010-12-15 10:18:12
【问题描述】:

我需要实现文件下载。我不想让任何服务器端文件 url 直接下载。我创建了一个 servlet,它将打开文件并将其写入响应流。现在来到前面 gwt 我有 onResponseReceived (请求请求,响应响应)收到响应时将调用哪个。现在如何进一步进行? .我需要的操作是,流中的文件应该下载到客户端计算机。

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: gwt servlets download gwt-ext


    【解决方案1】:

    你试过Window.open(ServletUrl, "_parent", "location=no")吗?

    并尝试在“application/exe”的响应中设置 ContentType

    这将提示用户保存或运行。

    Servlet 代码:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String filename = URLDecoder.decode(request.getPathInfo(), "UTF-8");
        File file = new File("/path/to/files", filename);
        response.setContentType("application/x-download");
        response.setHeader("Content-Disposition", "attachment; filename=" + filename);
        response.setHeader("Content-Length", file.length());
    
        BufferedInputStream input = null;
        BufferedOutputStream output = null;
    
        try {
            input = new BufferedInputStream(new FileInputStream(file));
            output = new BufferedOutputStream(response.getOutputStream());
    
            byte[] buffer = new byte[8192];
            for (int length = 0; (length = input.read(buffer)) > 0;) {
                output.write(buffer, 0, length);
            }
        } finally {
            if (output != null) try { output.close(); } catch (IOException ignore) {}
            if (input != null) try { input.close(); } catch (IOException ignore) {}
        }
    }
    

    【讨论】:

    • 感谢您的回复..但我不想向用户显示网址..如果我这样做..它将打开一个带有正确网址的新窗口..我不想这样做...我想在 gwt 中做一些事情 ..这将使 http req 到 servlet 并获取对象和用户 shud 能够下载 ..就像我们在 rapidshare 中看到的那样对..当然这太复杂了..但我想要类似的方式。
    • @Bhaswanth 请试试这个方法。因为使用这种方法,您将为用户提供 servlet 位置而不是文件位置。 Servlet 将文件写入客户端。由于内容类型,不会打开浏览器窗口,只看到保存、运行、取消提示对话框。
    • ya..这很好..但我想知道如何做到这一点..如何在代码中自动触发下载...
    • 这是一种触发下载,您将文件以流的形式发送到客户端,然后用户开始下载。我不明白你真正想要什么。这种方式是不是很像rapidshare?
    • 好的...很好..如果我使用这个..它的下载文件带有我的 servlet 名称..但没有扩展名...它希望它以带有扩展名的确切名称下载..如何这可以做到吗?
    【解决方案2】:

    您可以使用 _blank、_parent、_top、_self 中的任何一个

    • “_blank”属性导致 要打开的超链接的“目标” 一个新的
    • “_top”属性导致“目标” 要显示的超链接的 所有当前定义的顶层 框架集。
    • “_parent”属性导致 要显示的超链接的“目标” 在当前的整个区域 框架集。
    • “_self”属性导致“目标” 要在 当前帧。

    Source

    【讨论】:

      【解决方案3】:

      您可以在没有 servlet 的情况下做到这一点,只使用 GWT RPC 和 Data URIs

      1. 让您的 GWT RPC 方法返回文件内容或数据以生成文件。
      2. 在客户端,用接收到的文件内容格式化Data URI或生成数据内容。
      3. 使用Window.open 打开一个文件保存对话框,传递格式化的DataURI

      看看这个参考,了解Data URI的用法:

      Export to csv in jQuery

      【讨论】:

        猜你喜欢
        • 2014-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-16
        • 2011-02-18
        • 1970-01-01
        • 2011-10-01
        • 1970-01-01
        相关资源
        最近更新 更多