Java,SpringMVC,从服务器中提取任何类型的文件(.png,.jpg,.pdf,.doc等)并提供给用户下载的最简单方法?

Java,SpringMVC,从服务器中提取任何类型的文件(.png,.jpg,.pdf,.doc等)并提供给用户下载的最简单方法?,java,jsp,spring-mvc,download,Java,Jsp,Spring Mvc,Download,我一直在搜索这个,但我发现的信息对于我正在尝试做的事情来说似乎过于复杂,或者需要指定下载的文件类型并使用特定的Java类,我想知道是否有一种方法不必这样做,并且能够使用一种方法来这样做,而不管文件类型如何,因为我没有生成文件,只是从目录中存在的位置获取它。我在本地文件夹中有一组文件,例如: /media/files/files 在这个目录中,我有各种不同的文件,.jpg,.doc。xls、.png等,并希望以最简单的方式获取给定的文件路径,从目录中检索并将其发送回JSP,以便用户能够下载该文件

我一直在搜索这个,但我发现的信息对于我正在尝试做的事情来说似乎过于复杂,或者需要指定下载的文件类型并使用特定的Java类,我想知道是否有一种方法不必这样做,并且能够使用一种方法来这样做,而不管文件类型如何,因为我没有生成文件,只是从目录中存在的位置获取它。我在本地文件夹中有一组文件,例如:

/media/files/files
在这个目录中,我有各种不同的文件,.jpg,.doc。xls、.png等,并希望以最简单的方式获取给定的文件路径,从目录中检索并将其发送回JSP,以便用户能够下载该文件。我发现的信息似乎总是涉及从一个blob反序列化、从远程位置提取,或者类似的事情,在代码相当长的地方,我认为必须有一种相当简单的方法来完成我试图做的事情,因为我在本地有文件,并且它们是常规格式的(不是在数据库中,等等)

任何建议都将不胜感激

编辑感谢Costi我认为我现在走的是正确的道路,但我尝试了下面的方法,但仍然无法访问该文件:

我已将其放在tomcat/conf中的server.xml文件中:

然后尝试访问
http://myip:8080/files/test.txt
但它不起作用,在我的Spring web.xml中,我仅有的Servlet映射是:

<servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/d2/*</url-pattern>
    </servlet-mapping>

春天
/d2/*
非常感谢您的任何建议


修复:忘记了Eclipse中的server.xml覆盖了tomcat服务器中的server.xml,这就是为什么它不工作的问题

如果您不想在下载时使用任何逻辑,只需将文件作为静态资源提供即可,如果需要,由集装箱处理认证/授权材料。为了实现这一点,您只需将Spring DispatcherServlet映射到/media/files/,这样它就不会处理对/media/files/的请求,实现这一点的一个简单方法是将Spring servlet映射到某个扩展名,如/.html,或者映射到一个子目录而不是/。这样,容器将处理对您的/media/stuff的请求,并且只提供静态文件

如果您需要以某种方式干扰下载(例如,如果您在容器外处理auth内容,或者您想在每次下载之前或之后采取一些操作),那么您可以从spring控制器返回一个视图,该视图只将请求的文件代理到输出流,设置适当的标题后,如内容类型、长度、处置等。我不知道有任何这样的内置视图,但是自己创建一个视图并编写自己的ViewResolver非常容易,它将在/media/where下为文件名返回该视图的实例


我希望这会有所帮助。

谢谢,我不知道容器可以做到这一点,我对Java还是相当陌生,我会尝试一下。谢谢你的帮助,我发现了问题所在,我忘记了Eclipse server.xml在tomcat服务器中覆盖了server.xml,这对我来说很愚蠢,但现在它可以工作了