从Spring MVC流式传输动态文件

我有一个Spring Web MVC应用程序(以及BlazeDS应用程序,虽然不相关),其中文件是基于某些客户端操作动态生成的。

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

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

谢谢!

或标准的应用程序服务器规范?

就在这里。 由于你没有提到你正在使用哪一个,我将给出一个以Tomcat为目标的答案。 您基本上需要做的是在/conf/server.xml/path/to/your/resources添加一个Context元素:

  

这样他们就可以通过http://example.com/resources/...访问它们了http://example.com/resources/...

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

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