SpringMVC 在实际使用中很容易碰到文件上传服务器及调用服务器文件的需求,我在开发项目的时候也碰到了这个问题。我将以 JPG 格式的图片为例来介绍这两个功能的实现。
文件的上传
1.form 标签的设置
首先,要更该 form 标签的属性(重点是 enctype 与 method 需如代码所示。):
<form action="" enctype="multipart/form-data" method="post">
我建议用 Submit 的方式提交表单,因为我比较懒☺。
2.Controller 的处理
先贴上代码:
@RequestMapping(value = "/receiveFiles", method = {RequestMethod.POST})
@Transactional
public String ReceiveFiles(HttpServletRequest request,UploadedImageFile file) throws Exception {
//图片上传至服务器并保存图片路径
if(!file.getPhoto().isEmpty())
{
//防止图片重复,对图片进行重命名
String name = RandomStringUtils.randomAlphanumeric(10);
String newFileName = name + ".jpg";
//根据 request 获取服务器绝对路径,并新建一个空白文件
File newFile = new File(request.getServletContext().getRealPath("/upload"), newFileName);
newFile.getParentFile().mkdirs();
//将上传图片保存至空白文件
file.getPhoto().transferTo(newFile);
//保存图片名称(保存在某个对象中,还是某个文件中需要你自己实现,调用该文件时要用到)
savaDirs(newFileName);
}
//重定向
return "your direct";
}
主要是图片保存到一个指定的路径下,我是指定为 “/upload” 下,然后只要保存好图片的名字,等会儿就能方便调用了。
3.springMVC.xml 的配置
<!-- 配置多媒体文件解析器,开启文件上传 -->
<!-- 文件上传 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为5MB,最小单位为字节-->
<property name="maxUploadSize">
<value>5242880</value>
</property>
</bean>
以上就是图片的上传。
文件的调用
1.springMVC.xml 的配置
<!--静态资源解析包括 :js、css、img、..-->
<!--<mvc:resources mapping="/js/" location="/js/**"/>-->
<!--<mvc:resources mapping="/css/" location="/css/**"/>-->
<!--<mvc:resources mapping="/fonts/" location="/fonts/**"/>-->
<!--加载静态资源(images)-->
<mvc:resources mapping="/images/" location="/upload/**"/>
<mvc:default-servlet-handler/>
需要配置 mvc:resources 来进行静态资源的访问。
2.web.xml 的配置
<!--在默认情况下允许访问jpg静态资源,必须加在springmvc的servlet之前-->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
web.xml 也需配置正确,不然 jpg 文件还是可能访问不到。
3.Img 标签的设置
就和正常调用图片的方式一样,只要给出完整的路径就可以了,我使用的是 EL 表达式来拼接路径
<img src="${pageContext.request.contextPath}/upload/${uploadImg.name}" id="uploadImg"/>
其中, ${uploadImg.name} 的 uploadImg 是我传给网页的一个自定义对象,你的自定义对象取决于你自己想怎么实现。
以上,就是全部内容。