繁体   English   中英

使用 spring 重新映射 web 应用程序 (tomcat) 中的图像请求以获得绝对路径

[英]Remap image requests in a web application (tomcat) with spring for an absolute path

我正在尝试找到一种方法将路径重新映射到绝对路径以检索存储在服务器文件系统中的图像,我也在使用 spring mvc 但<mvc:resource>不能 map 绝对路径,我可以找不到使用 spring 控制器的好方法

即我需要map从/images/**到/root/var/img/**的所有图像请求,这样当客户端浏览器尝试加载页面的图像时,每个图像都停留在上面提到的路径中

您可以使用docBase引用您的文件夹 ( /root/var/img ) 创建一个新上下文,它应该如下所示:

<Context path=”/images” docBase=”/root/var/img/” ... >
</Context>

Refer to Tomcat context configuration documentation for more details (eg, for Tomcat 6: Apache Tomcat Configuration Reference: The Context Container ).

本文档的简介列出了可以定义上下文元素的可能位置。

编辑

正如我在评论中提到的,在不创建任何新上下文的情况下执行此操作的特定于 Spring 的方法似乎是使用RedirectView (链接到 Spring v2.5 JavaDoc)。 根据JavaDoc:

“重定向到绝对、上下文相对或当前请求相对 URL 的视图,默认情况下将所有 model 属性公开为 HTTP 查询参数。”

编辑2

看来我误解了 RedirectView 的目的,这是一个很好的旧 URL 重定向。 因此,@Jens 的回答应该更合适(+1)。 我仍然想知道 Spring 中是否有现有的标准解决方案(我最初认为 RedirectView 会这样做..)它不像要编写很多代码,但仍然:)

EDIT3在阅读了有关此主题的更多信息后,我发现<mvc:resources>能够做到这一点(即,不仅使用相对路径或类路径映射资源),您只需使用file:前缀正确配置位置 事实上,已经有关于 SO 的答案可以准确解释您需要做什么: Spring: serving static 资源外部上下文根

不确定我是否正确,但我认为常见的方法是设置一个 controller 映射到 /images/ 的请求:

@RequestMapping(value ="/images/")    
public void fetchImage(@RequestParam String id, HttpServletResponse response)

然后 controller 可以从配置的目录(如“/root/var/img”)加载请求的图像,并将其写入响应的 OutputStream。 例如:

org.apache.commons.io.IOUtils.copy(fileInputStram, response.getOutputStream())

此外,您必须在响应中设置正确的 mime 类型等。

延斯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM