GWT进度条在浏览器上显示之前缓冲PDF内容

时间:2012-07-05 17:32:17

标签: gwt servlets download progress-bar

在我的GWT应用程序中,我编写了一个servlet来下载/流式处理PDF文件。

以下是代码。

    protected void updateResponse(HttpServletResponse response, InputStream dataStream, long contentLength, KnownContentTypes contentType, String filename, int cacheSeconds) {

    response.setHeader("Content-Type", contentType.getTypeString());
    response.setHeader("Content-Length", String.valueOf(contentLength));
    response.setHeader("Content-disposition", "inline;filename=" + filename);
    response.setHeader("Cache-Control", "max-age=" + cacheSeconds);


    byte[] buffer = new byte[BUFFER_SIZE];
    try {
         ServletOutputStream out = response.getOutputStream();
         while ((dataStream.read(buffer)) != -1) {
            out.write(buffer); 
         }

    } catch (IOException e) {
        sendError(response);

    } 
}

pdf在浏览器上成功呈现。 问题是一些pdf的大小非常大,因为这是在window.open上调用的,我看到的只是一个空白的浏览器。

我希望显示一个动态消息,例如'1MB 5MB下载',并在流式传输所有字节后显示/呈现整个PDF文件。

请让我知道如何做到这一点。 我是GWT的新手,我们将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:0)

这不能通过我们通常使用Window.open调用servlet来进行同步请求来完成。您必须发出ajax请求来计算进度并显示响应。

看看这个图书馆:http://code.google.com/p/gwtupload/。它非常易于使用,并且在大多数浏览器中都能正常使用。它使用ajax个请求来计算进度。