6

我们有这样的设计:

在此处输入图像描述

我们在 tomcat 上安装的服务有一个方法 getDatabaseData(String request) (RMI Client),它使用核心上存在的(RMI 服务器实现)从数据库接收数据。

我们想做一些事情,我们在tomcat中安装的服务制作一个xml文件并将其发送给客户端:

我们已经考虑了一个解决方案:

  • 首先使用 getDatabaseData(String request) 在我们的 tomcat 上制作整个 xml 文件,然后我们的用户可以使用指向它的链接获取参考并开始下载数据。

但是这个解决方案对我们来说没有任何信息,因为这个文件的大小太大了,如果我们想这样做,我们的 tomcat 服务器存储将很快被填满并崩溃,所以我们正在寻找实时流数据的解决方案给用户而不是创建整个文件。我的意思是一种在从 CORE 接收数据时在 xml 模板中将数据发送给用户的方法。

你有什么主意吗 ?

(顺便说一句,tomcat 上的 Web 服务是使用 Spring MVC 和 Spring Security 编写的)

4

2 回答 2

1

我可以给你一些我当前项目中的代码,我们在 struts 操作中返回一个文件:

response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
ServletOutputStream out = response.getOutputStream();
out.write(file);

这是你想要的?

于 2013-04-11T08:27:37.007 回答
0

使用@Noofiz 代码,我编写了这段代码来测试这个功能并且对我有用!

我们可以从文件中读取并按时发送给用户,让用户下载文件!

1)我打印了“结束!” 确保文件在缓冲时按时发送给用户,而不是先完成缓冲,然后将其发送给用户!

2)检查下载的文件和主文件md5,它们相似。

这是我的 servlet 代码:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    InputStream is = new FileInputStream("/home/Mehdi/Desktop/log.log");
    response.setContentType("application/octet-stream");
    ServletOutputStream out = response.getOutputStream();
    int i;
    byte[] buffer = new byte[10 * 1024];

    while ((i = is.read(buffer)) != -1) {
        if (i != 10240) {
            for (int j = 0; j < i; j++) {
                out.write(buffer[j]);
            }
        } else {
            out.write(buffer);
        }
    }
    System.out.println("End!");
}
于 2013-04-11T10:56:25.480 回答