加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用GWT下载动态文件

发布时间:2020-12-14 05:23:33 所属栏目:Java 来源:网络整理
导读:我有一个GWT页面,用户输入数据(开始日期,结束日期等),然后这个数据通过RPC调用进入服务器.在服务器上,我想用POI生成Excel报表,让用户将该文件保存在本地机器上. 这是我的测试代码,将文件流式传输回客户端,但由于某些原因,我认为当我使用RPC时,不知道如何将文
我有一个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并将其发送回客户端.浏览器将自动弹出文件下载对话框.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读