如何从Spring MVC Web应用程序中的Tomcat自定义目录中读取文件

时间:2015-01-09 16:38:11

标签: java spring jsp spring-mvc tomcat

我有Spring MVC应用程序,在我的JSP中我有一个表单,它将文件上传到我的本地Tomcat服务器到目录“C:/apache-tomcat-7.0.56/photos”。

这是我的Tomcat文件结构:

C:\
  apache-tomcat-7.0.56\
    bin\
    conf\
    lib\
    logs\
    photos\  <-- I WANT TO READ FILES FROM THAT FOLDER
       photo1.jpg
       photo2.jpg
    temp\
    webapps\
       myapp\  <-- MY SPRING APPLICATION
         resources\
         WEB-INF\

怎么做?我无法通过网址'localhost:8080 / photos'访问它们。这些文件的url路径是什么?我知道我可以通过这样的本地驱动器的绝对路径来做到这一点:

<img src='C:\apache-tomcat-7.0.56\photos\photo1.jpg' />

但我想通过服务器网址阅读。

修改 我无法将文件上传到我可以轻松读取文件的webapp / resources目录,但是当我重新部署应用程序时,文件将被删除。

3 个答案:

答案 0 :(得分:0)

为了让Tomcat在浏览器中提供图像,需要知道可以提供此目录中的文件。您需要更新Web服务器配置。有很多方法可以解决它。其中一些是:

  1. 在webapps目录中创建照片目录
  2. 在服务器上的某处创建目录,并将配置文件添加到/ conf / Catalina / localhost目录
  3. 创建一个可以读取文件并在浏览器中显示的控制器
  4. 另见:New uploaded files and Tomcat?

答案 1 :(得分:0)

您可以访问静态资源,就好像它们属于同一个Web应用程序一样。您所需要的只是配置对静态资源的访问权限并使用img标记中的相对路径:

  • 基于XML的配置

    <mvc:resources mapping="/photos/**" location="file:///c:/apache-tomcat-7.0.56/photos/" />
    
  • 基于Java的配置

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/css/**").addResourceLocations("/css/");
        registry.addResourceHandler("/js/**").addResourceLocations("/js/");
        registry.addResourceHandler("/photos/**").addResourceLocations("file:///C:/apache-tomcat-7.0.56/photos/");
    }
    

img标记中:

  • <img src="<c:url value="/photos/photo1.jpg" />">
  • <img src="${pageContext.request.contextPath}/photos/photo1.jpg">

答案 2 :(得分:0)

简单快捷的方式。

System.getenv("CATALINA_HOME") + "/webapps/your project name/images

Tomcat无法在没有CATALINA_HOME的情况下工作,因此我们无需任何其他配置文件即可使用它。