java – 使用GWT下载动态文件

前端之家收集整理的这篇文章主要介绍了java – 使用GWT下载动态文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个GWT页面,用户输入数据(开始日期,结束日期等),然后这个数据通过RPC调用进入服务器.在服务器上,我想用POI生成Excel报表,让用户将该文件保存在本地机器上.

这是我的测试代码,将文件流式传输回客户端,但由于某些原因,我认为当我使用RPC时,不知道如何将文件流式传输到客户端:

public class ReportsServiceImpl extends RemoteServiceServlet implements ReportsService {
    public String myMethod(String s) {

        File f = new File("/excelTestFile.xls");

        String filename = f.getName();

        int length = 0;

        try {
            HttpServletResponse resp = getThreadLocalResponse();
            ServletOutputStream op = resp.getOutputStream();
            ServletContext context = getServletConfig().getServletContext();
            resp.setContentType("application/octet-stream");
            resp.setContentLength((int) f.length());
            resp.setHeader("Content-Disposition","attachment; filename*=\"utf-8''" + filename + "");

            byte[] bbuf = new byte[1024];
            DataInputStream in = new DataInputStream(new FileInputStream(f));

            while ((in != null) && ((length = in.read(bbuf)) != -1)) {
                op.write(bbuf,length);
            }

            in.close();
            op.flush();
            op.close();

        }
        catch (Exception ex) {
            ex.printStackTrace();
        }

        return "Server says: " + filename;
    }
}

我已经在互联网上的某个地方看过,你不能用RPC做文件流,我必须使用Servlet.有没有关于如何使用Servlet以及如何从ReportsServiceImpl调用该servlet的示例.我真的需要制作一个servlet,或者可以使用我的RPC将其流式传输?

解决方法

你必须做一个常规的Servlet,你不能从ReportsServiceImpl流二进制数据.此外,没有办法从ReportsServiceImpl调用servlet – 您的客户端代码必须直接调用servlet.

在客户端,您必须使用通过查询字符串传递的参数创建一个正常的锚点链接.像< a href =“http://myserver.com/myservlet?parm1 = value1& ..”< / a&gt ;. 在服务器端,将您的代码移动到标准的Servlet,而不是从RemoteServiceServlet继承.从请求对象读取参数,创建excel并将其发送回客户端.浏览器将自动弹出文件下载对话框.

原文链接:https://www.f2er.com/java/122780.html

猜你在找的Java相关文章