第一步:写html文件
<form action="/uplode" method="post" enctype="multipart/form-data">姓名:<input type="text" name="username"><br>年龄:<input type="text" name="age"><br>头像:<input type="file" name="image"><br><input type="subsit" value="提交">
</form>
这上面这个html代码,里面可以上传一个头像的文件
如果是上传文件的话,需要注意的是,提交方式必须是post =》 method=“post”。 后面的 enctype(提交表单时使用何种编码类型)这个的类型必须为 multipart/form-data =》 enctype=“multipart/form-data” , 这个才会将整个文件给传送到后端去,如果使用的是默认的编码类型,传输的则是文件的名称
必须注意上面的这两点
第二步:java本地储存
先看代码
@PostMapping("/upload")
public Result upload(String username, Integer age,MultipartFile image) throws Exception{log.info("文件上传:{},{},{}",username, age, image);// 获取原始文件名 - 1.jpg 1.2.3.jpgString originalFilename = image.getOriginalFilename(); //getName()。这个方法获取的是表单项的名字// 构造唯一的文件名(不能重复) --uuid(通用唯一识别码)int index = originalFilename.lastIndexOf("."); // 获取到的是最后一个点所处在的位置String extname = originalFilename.substring(index); //直接截取到文件的后缀名String newFileName = UUID.randomUUID().toString() + extname;log.info("获取到的新的文件名:{}", newFileName);// 将文件储存到服务器的磁盘目录中。E:\imageimage.transferTo(new File("E:\\image\\"+newFileName));return Result.success();
}
上面的代码中,首先用MultipartFile对象去接受从网页传来的文件数据对象,获取到原始的文件名,保存在指定的路径之上,我们用uuid来做唯一标识,来作为文件名.其中后缀名用字符串中的一些方法获取.
但是文件最大传输大小问1M,那该怎么办呢?
可以在配置中配置如下配置
# 配置单个文件最大上传大小
spring.servlet.multipart.max-file-size=10MB
# 配置单个请求最大上传大小(一次请求可以上传多个文件)
spring.servlet.multipart.max-request-size=100MB