SpringBoot开发web项目,有一个MultipartFile接口。继承InputStreamSource,这个接口就是用来处理文件上传和保存。
1.写一个前端上传文件的页面:picUpload.html
<!DOCTYPE HTML>
<html>
<head>
<title>pictureUploading</title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8 ">
</head>
<body>
<form enctype="multipart/form-data" method="post" action="/upload">
文件:<input type="file" name="fileUpload"/><br/>
<input type="submit" value="上传"/>
</form>
<form enctype="multipart/form-data" method="post" action="/uploads">
多个文件:<input type="file" name="file" multiple="multiple"/><br/>
<input type="submit" value="上传" />
</form>
</body>
</html>
页面放在templates包下面,自己创建一个upload包,用来放上传文件按页面:当然也可以直接放在tempates包下面
如果访问不到,可以参考一下链接:
SpringBoot如何返回(访问)到template下面的html页面
2.MVC模式下,Controller返回页面:
@RequestMapping("/picUpload")
public String picUpload(){
return "/upload/picUpload.html";
}
3.处理上传的单个文件:
@PostMapping("/upload")
@ResponseBody
public Object upload(MultipartFile fileUpload){
if(fileUpload.isEmpty()){
return "文件为空";
}
//获取文件名
String fileName = fileUpload.getOriginalFilename();
//获取文件后缀名
String suffixName = fileName.substring(fileName.lastIndexOf("."));
//指定本地文件夹存储图片
String filePath = "C:/IDEA/WorkSpace/helloWorld/src/main/resources/upload/";
try {
//将图片保存到static文件夹里
fileUpload.transferTo(new File(filePath+fileName));
return "上传成功";
} catch (Exception e) {
e.printStackTrace();
return "上传失败";
}
}
箭头处是文件保存的路径:记得最后一个地方+“ / ”,否则只是保存在上一级路径下面。这里的upload文件是我临时建的。
4.处理多个文件上传:
@PostMapping("/uploads")
@ResponseBody
public Object uploads(MultipartFile[] file){
for(int i=0;i<file.length;i++) {
MultipartFile fileUpload=file[i];
//获取文件名
String fileName = fileUpload.getOriginalFilename();
//获取文件后缀名
String suffixName = fileName.substring(fileName.lastIndexOf("."));
//指定本地文件夹存储图片
String filePath = "C:/IDEA/WorkSpace/helloWorld/src/main/resources/upload/";
try {
//将图片保存到static文件夹里
fileUpload.transferTo(new File(filePath + fileName));
} catch(Exception e) {
e.printStackTrace();
return "上传失败";
}
}
return "上传成功";
}
箭头这里我用的数组就可以了,也可使用HttpServlet处理。
5.启动项目,输入地址:http://localhost:8080/picUpload 测试:
点击选择文件,我们选择一张图片测试:
点击上传:返回上传成功,就是上传成功。
再到项目保存路径下寻找一下上传的文件是否存在:
表示我们上传成功。
同样的方法测试上传多个即可以了。
6.最后看一下核心类MultipartFile:
接口是在org.springframework.web.multipart.MultipartFile包下面,所以它是Spring-Web包下的,
接口继承了InputStreamSource
接口InputStreamSource是org.springframework.core.io包下的,看的出来时Spring核心IO包,可以理解为特殊的JAVA中的IO流。打开源码,我们看注解,也可得知:import java.io.IOException;;import java.io.InputStream;