使⽤MultipartFile做⽂件上传的功能
使⽤ MultipartFile
准备表单
<body>
<form enctype="multipart/form-data" method="post" action="/upload">inputtypefile不上传文件
⽂件:<input type="file" name="head_img"/>
姓名:<input type="text" name="name"/>
<input type="submit" value="上传"/>
</form>
</body>
控制器
import net.xdclass.demo.domain.JsonData;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
@RestController
public class FileController {
private static final String filePath = "D:\\IdeaProjects\\xdclass_springboot\\src\\main\\resources\\static\\images\\";
@PostMapping(value = "/upload")
public JsonData upload(
@RequestParam(value = "head_img") MultipartFile file,
HttpServletRequest request) {
// 表单的 name="name" 属性
String name = Parameter("name");
// 上传的⽂件名
String filename = OriginalFilename();
String suffixName = filename.substring(filename.lastIndexOf("."));
// 随机⽣成
filename = UUID.randomUUID() + suffixName;
File dest = new File(filePath + filename);
try {
return new JsonData(0, dest);
} catch (IOException e) {
e.printStackTrace();
}
return new JsonData(-1, null, "faild to save");
}
}
  MultipartFile 对象的transferTo⽅法,⽤于⽂件保存(效率和操作⽐原先⽤FileOutStream⽅便和⾼效)。
  访问,结果如下。
{
"code": 0,
"data": "D:\\IdeaProjects\\xdclass_springboot\\src\\main\\resources\\static\\images\\611fbdd7-95c5-4803-8c6f-796cccf6d2be.jpg", "msg": null
}
  查看上传的图⽚。
考虑1:限制⽂件⼤⼩
思路:⾃定义 createMultipartConfig。放在启动类⾥也可以。@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
//单个⽂件最⼤
factory.setMaxFileSize(DataSize.ofMegabytes(300));
/// 设置总上传数据总⼤⼩
factory.setMaxRequestSize(DataSize.ofGigabytes(1));
ateMultipartConfig();
}
考虑2:⾃定义上传⽂件的保存路径
避免硬编码,思路:写成配置⽂件,读取出来。
参考我的 “读取配置⽂件”,。