版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38409944/article/details/82864542
前言:
文件的上传功能也在网站中发挥着不可替代的作用,这里我就来讲讲简单利用SpringMVC实现文件的上传。
这里我的配置是这样的:
idea+maven+tomcat9+jdk8
我也将该项目的Demo放到了git上,有兴趣的朋友可以看一看:入门用
https://github.com/jjc123/SpringMVC_File_upload
接下来我就来强调里面的细节问题:
必须的内容在springmvc配置文件需要的配置:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"/>
<property name="maxUploadSize" value="10485760000"/>
<property name="maxInMemorySize" value="40960"/>
</bean>
它以来的jar包管理maven需要添加:
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
再来的问题就是最重要的了:
为何上传的图片在本地可以显示,使用本地的tomcat打开也可以,但是通过idea打开就是无法显示图片?
网上有人说:DispatcherServlet拦截了所有内容包括静态资源。
可是我的配置并没有使用/拦截所有。
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
那问题出在哪呢?
虚拟目录的问题:
这个问题我尝试了很多解决方法:
第一种:设置tomcat虚拟目录
修改Tomcat目录下的conf文件夹下的server.xml配置文件,在最下方的Host标签中添加如下配置:
<Context docBase = "D:\email" path = "/pic" reloadable = "false">
问题:
这里可以做到idea打开文件的时候输入以下内容可以显示图片:
http://localhost:8080/pic/5.jpg
但是加上项目中显示图片无法访问:
<img src="/pic/6.jpg" width="100" height="100" /><br/>
设置项目虚拟目录
将本地目录映射到项目的虚拟目录,如此就可以通过虚拟目录访问到实际目录。
<img src="/pic/${image}" width="100" height="100" /><br/>
注意:如果有多个file标签,即需要上传多张图片的时候,可以在页面创建多个name相同的type为file的标签,而且name为files 那么Controller方法中的MultipartFile数组前面要加@RequestParam(”files“)注解,表示解析所有名为files的文件资源。