gpt4 book ai didi

java - 使用 GWT 下载动态文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:11:30 24 4
gpt4 key购买 nike

我有一个 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, 0, length);
}

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

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

return "Server says: " + filename;
}
}

我在 Internet 上的某个地方读到,您不能使用 RPC 进行文件流处理,而我必须为此使用 Servlet。是否有关于如何使用 Servlet 以及如何从 ReportsServiceImpl 调用该 servlet 的示例。我真的需要制作一个 servlet 还是可以使用我的 RPC 将其流回?

最佳答案

你必须制作一个常规的 Servlet,你不能ReportsServiceImpl 流式传输二进制数据.此外,无法从 ReportsServiceImpl 调用 servlet - 您的客户端代码必须直接调用 servlet。

在客户端,您必须使用通过查询字符串传递的参数创建一个普通的 anchor 链接。类似于 <a href="http://myserver.com/myservlet?parm1=value1&.."</a> .

在服务器端,将你的代码移动到一个标准的 Servlet,一个不继承自 RemoteServiceServlet 的 Servlet。 .从请求对象中读取参数,创建 excel 并将其发送回客户端。浏览器会自动弹出文件下载对话框。

关于java - 使用 GWT 下载动态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2822667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com