spring mvc 文件上传特殊配置及操作
文件上传
1) pom.xml添加依赖
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
2) springmvc.xml 中对上传文件表单做特殊配置
上传文件表单配置
multipartResovler 上传文件表单的解析器
<!-- 配置上传文件表单解析器, id 是固定的 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
</bean>
3) 编辑表单页面
<!-- multipart/form-data 表示表单数据由多部分,属于复杂的表单格式 -->
<form action="请求地址" method="post" enctype="multipart/form-data">
<!-- 文件选择框 -->
<input type="file" name="请求参数名">
</form>
4) 编写控制器
@Controller
public class UploadController {
@RequestMapping("/upload")
public String upload(String username,
Integer age,
MultipartFile image) throws IOException {
System.out.println("上传文件的原始名称:" + image.getOriginalFilename());
System.out.println("上传文件的类型:" + image.getContentType());
System.out.println("获取上传文件大小:" + image.getSize());
// 生成了临时文件, 当请求结束, 此临时文件会被删除
// 把临时文件另存为: file
image.transferTo(new File("d:\\" + image.getOriginalFilename()));
return "hello";
}
}
5) 图片预览
通过js完成
<input type="file" name="image" id="image" onchange="preview()">
<img src="" id="preview"/>
function preview() {
// 获取图片选择框中图片的二进制信息
var image = document.getElementById("image");
var file = image.files[0]; // 拿到数组中第一个图片文件
// 读取文件内容
var reader = new FileReader();
// 定义事件
reader.onload = function() {
// 获取结果
document.getElementById("preview").src = this.result;
};
// 开始读取
reader.readAsDataURL(file);
}
6) 对上传文件的控制
从客户端的角度限制 accept 表示可以接受的类型,也就是图片的类型
服务器端要对上传文件做检查
图片,修改大小 800x600 -> 640x480 成功
假图片,修改大小 800x600 -> 640x480 报异常文件大小限制
<!-- 配置上传文件表单解析器, id 是固定的 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 限制上传文件的总大小,单位是字节-->
<property name="maxUploadSize" value="2000"></property>
</bean>
7) springmvc 对静态文件的处理(图片,html,js,css)
springmvc 默认把所有路径都当做了 控制器 的路径
文件上传的例子
upload.jsp页面,提交图片的页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<!-- multipart/form-data 表示表单数据由多部分,属于复杂的表单格式 -->
<form action="/upload" method="post" enctype="multipart/form-data">
<!-- 文件选择框 -->
<input type="file" name="image" id="image" onchange="preview()" accept=".jpg,.png,.bmp">
<input type="submit" value="提交">
</form>
<img src="" id="preview"/>
<script>
//这事件是为了显示图片在页面上
function preview() {
// 获取图片选择框中图片的二进制信息
var image = document.getElementById("image");
var file = image.files[0]; // 拿到数组中第一个图片文件
// 读取文件内容
var reader = new FileReader();
// 定义事件
reader.onload = function() {
// 获取结果
document.getElementById("preview").src = this.result;
};
// 开始读取
reader.readAsDataURL(file);
}
</script>
</body>
</html>
文件处理类
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
@Controller
public class UploadController {
@RequestMapping("/upload")
public String upload( MultipartFile image) throws IOException {
//获取文件名
System.out.println("上传文件的原始名称:" + image.getOriginalFilename());
//获取文件类型
System.out.println("上传文件的类型:" + image.getContentType());
//获取文件大小
System.out.println("获取上传文件大小:" + image.getSize());
// 生成了临时文件, 当请求结束, 此临时文件会被删除
// 把临时文件另存为: file,这样可以变成在需要的目录下
image.transferTo(new File("d:\\" + image.getOriginalFilename()));
//请求重定向
return "redirect:/upload.jsp";
}
}
结果
upload.jsp页面
点击选择文件按钮,会弹出以下对话框:
选择完图片后,页面显示选择的图片 ,如下图:
d盘里保存了该图片
控制台上输出
上传文件的原始名称:2_1.bmp
上传文件的类型:image/bmp
获取上传文件大小:172854
还没有评论,来说两句吧...