通过我们一个web网站都需要上传文件,比如用户头像。。。。直接上干货。。。
首先我们需要创建一个HTML文件用于上传文件。。。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/upload" enctype="multipart/form-data" method="post">
文件:<input type="file" name="head_img">
姓名:<input type="text" name="name">
<input type="submit" value="上传">
</form>
</body>
</html>
然后我们在我们的controller层添加我们的上传代码。当然一般是要封装的。
@Controller
public class FileController {
//设置文件存储路径
private static final String filePath = "C:\\Users\\LLh\\Desktop\\";
@RequestMapping("/upload")
@ResponseBody
public JsonData upload(@RequestParam("head_img")MultipartFile file, HttpServletRequest request){
// file.isEmpty();//判断图片是否为空
// file.getSize();//图片大小进行判断
String name = request.getParameter("name");
System.out.println("用户名:"+name);
//获取文件名
String fileName = file.getOriginalFilename();
System.out.println("上传文件名为:"+fileName);
//获取文件的后缀名
String suffixName = fileName.substring(fileName.lastIndexOf("."));
System.out.println("上传的后缀名为:"+suffixName);
//文件上传后的路径
fileName = UUID.randomUUID()+suffixName;
System.out.println("转化后的名称:"+fileName);
File dest = new File(filePath+fileName);
System.out.println("保存路径为:"+filePath+fileName);
try{
file.transferTo(dest);
//MultipartFile 对象的transferTo方法,用于文件保存(效率和操作比原先用FileOutStream方便和高效)
return new JsonData(0,fileName);
}catch (IOException e) {
e.printStackTrace();
}
return new JsonData(-1,"上传失败");
}
}
MultipartFile 是属于springmvc的一个文件上传组件。
在上传文件后我们还遇到一个问题就是文件上传的大小的限制。这是我们应该配置一个上传文件的配置类。
在我们的启动类里面添加
@Bean
public MultipartConfigElement multipartConfigElement(){
MultipartConfigFactory factory = new MultipartConfigFactory();
//单个文件最大
factory.setMaxFileSize(DataSize.parse("10240KB"));
factory.setMaxRequestSize(DataSize.parse("102400KB"));
return factory.createMultipartConfig();
}
当然这个配置类依旧可以进行封装,我们需要封装就新建config文件夹新建配置类然后再类上面添加注解@Configuration即可
在我们打包springboot时我们还需固定文件上传的位置,在我们的application.properties文件中添加
web.upload-path=C:/Users/LLh/Desktop
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,classpath:/test/,file:${web.upload-path}
web.upload-path 不属于我们的springboot范围内,需要添加我们的映射才能使用。也就是在我们的spring.resources.static-locations= 最后面添加即可,这个也就是我们访问文件的优先顺序。
-----------------------学习笔记