- 表单中的组件type="file"
image.png
<input type="file" name="pictureFile"/>
2.如果要上传文件, 那么必须在form表单中添加如下属性enctype="multipart/form-data"告诉服务器,并且method属性值必须为post, 传递给后台的数据是个文件而不是字符串
image.png
<form id="itemForm" action="${pageContext.request.contextPath}/updateItems.do"
enctype="multipart/form-data" method="post">
</form>
3.需要在springmvc.xml文件中配置一个文件解析器
image.png
<!-- 文件上传 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为5MB -->
<property name="maxUploadSize">
<value>5242880</value>
</property>
<property name="defaultEncoding">
<value>UTF-8</value>
</property>
</bean>
-
文件上传需要导入文件上传的jar包
image.png -
在Controller方法中进行图片参数的绑定
image.png
// 修改信息
@RequestMapping(value = "/updateItems.do")
public String updateItems(Model model,
@RequestParam("pictureFile") MultipartFile pic) throws Exception {
- 在tomcat中绑定一个虚拟路径, 真正路径是本地的磁盘。在tomcat的server.xml文件中的<host>标签下添加,然后只需要将图片上传到E盘下的temp目录即可
切记:不要把图片上传到工程目录 ,不方便进行工程维护。实际电商项目中使用专门图片服务器(比如apache、tomcat)。本教程使用图片虚拟目录,通过虚拟目录访问硬盘上存储的图片目录。
我用的是开发工具为IDEA,虚拟目录的设置为
在tomcat服务器配置中, 加入存放图片的文件夹, 在右边的访问写上路径.
image.png image.png
效果:
image.png
- 具体的上传代码
在对应的Controller方法里添加
// 下面是图片上传的代码
if (!pic.isEmpty()) {
// 得到图片的原始文件名
String originalName = pic.getOriginalFilename();
// 指定带盘符的路径, 物理路径
String realPath = "E:\\temp\\";
/*
为了处理出现重名现象, 将原始文件名去掉,
通过UUID算法生成新的文件名
*/
String uuidName = UUID.randomUUID().toString();
// uuid名称加上文件的后缀名
String newFile = uuidName + originalName.substring(originalName.lastIndexOf("."));
// 创建File文件
File file = new File(realPath + newFile);
// 将图片写入到具体的位置
pic.transferTo(file);
// 将文件名保存到数据库
items.setPic(newFile);
}
完整代码地址
https://github.com/menglanyingfei/SSMLearning/blob/master/jar%E5%8C%85/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0.zip
https://github.com/menglanyingfei/SSMLearning/tree/master/SSM
网友评论