Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从SpringMVC流式传输动态文件_Java_Spring_File_Spring Mvc_Streaming - Fatal编程技术网

Java 从SpringMVC流式传输动态文件

Java 从SpringMVC流式传输动态文件,java,spring,file,spring-mvc,streaming,Java,Spring,File,Spring Mvc,Streaming,我有一个SpringWebMVC应用程序(还有一个BlazeDS应用程序,虽然没有那么重要),其中的文件是根据某些客户端操作动态生成的 我只想将文件系统上的某个目录映射到Spring MVC(或应用服务器)url,并让它为该目录中的文件提供服务(支持流式传输和标准的上次修改的头文件)。理想情况下,映射目录将通过spring配置进行配置,因为我已经有了每台机器对设置的支持 那么,我该怎么做呢?到目前为止,我能找到的最好方法是编写一个控制器,手动读取文件并逐字节流式传输。然而,这似乎远远不够理想。S

我有一个SpringWebMVC应用程序(还有一个BlazeDS应用程序,虽然没有那么重要),其中的文件是根据某些客户端操作动态生成的

我只想将文件系统上的某个目录映射到Spring MVC(或应用服务器)url,并让它为该目录中的文件提供服务(支持流式传输和标准的上次修改的头文件)。理想情况下,映射目录将通过spring配置进行配置,因为我已经有了每台机器对设置的支持

那么,我该怎么做呢?到目前为止,我能找到的最好方法是编写一个控制器,手动读取文件并逐字节流式传输。然而,这似乎远远不够理想。SpringMVC或标准应用服务器规范中是否已经包含了对此类内容的支持


谢谢

最理想的方法是在应用服务器前面使用轻量级代理服务器,如nginx或lighthttpd。您可以将其配置为提供静态内容,而无需调用应用程序

如果目录和文件是动态的,您可以在控制器上准备文件的实际路径,并使用标题将此文件路径提供给前端服务器。例如,对于nginx,它是一个
X-Accel-Redirect
标题。了解更多信息(并遵循其他http服务器的链接)

还是标准的应用服务器规范

是的,有。因为你没有提到你使用的是哪一个,我会给出一个有针对性的回答。基本上,您需要做的就是在
/conf/server.xml
中为
/path/to/your/resources
添加一个
上下文
元素:

<Context docBase="/path/to/your/resources" path="/resources" />


这样就可以通过
http://example.com/resources/...

如果您的处理模型支持它,为什么不将文件系统的中间人从图片中完全删除,并在生成文件时通过响应流将其返回?看看SpringMVC的AbstractExcelView和AbstractPDFView类,看看如何实现这一点的一些示例

谢谢。生成时间太长(约10秒),无法始终实时生成。但是,我可能能够从这些源代码中派生出我自己的AbstractStreamingFileView。。。但是,我认为很难在我的spring配置中集成目录的位置,这样它就可以通过Eclipse通过部署、构建脚本和本地开发人员机器工作,我认为这很难以一种既适用于开发环境又适用于服务器的方式进行集成。对于开发环境,您可以使用字节到字节的输出,您可以轻松地为此创建一个控制器。但是,在生产服务器上部署时,您可以将此控制器配置为仅使用头的输出。