上传文件:表单要求 1,enctype="multipart/form-data" 2.表单中需要有type="file"的input 3.表单的请求方式一定是POST。即method="post" servlet要求 1.不能使用request.getParameter 2.使用request.getInputStream 例如: <form action="/file_upload/RegistServlet" method="post" enctype="multipart/form-data"> 用户:<input name="username" type="text"><br> 注册:<input name="password" type="password"><br> 照片:<input name="pic" type="file" ><br> <input type="submit" value="提交"> </form>
ElementUI提供了上传组件
Spring框架在spring-web对文件上传进行了封装,其底层是基于Apache的commons-fileupload和commons-io组件,,所以使用时在controller的方法声明一个MultipartFile类型参数即可
例如: ps: MultipartFile pic的参数名必须与name="pic"一致,不然接收不到 @PostMapping("/upload") public R<String> upload(MultipartFile pic){ return null; }
文件上传代码
配置路径在yml里
reggie: path: D:\code\image\
@RestController
@RequestMapping("/common")
@Slf4j
public class CommonController {
@Value("${reggie.path}")
private String basePath;
/**
* 文件上传
* @param file 参数起名与页面那么一致
* @return 返回上传文件新名
*/
@PostMapping("/upload")
public R<String> upload(MultipartFile file){
log.info("上传图片:{}", file.getName());
//传来文件的原始文件名
String originalFilename = file.getOriginalFilename();//abc.jpg
//获取格式后缀名
String substring = originalFilename.substring(originalFilename.lastIndexOf("."));//.jpg
//生成随机文件名,避免覆盖
String fileName = UUID.randomUUID().toString()+substring; //adsd.jpg
//判断目录是否存在
File dir =new File(basePath);
if (!dir.exists()){
dir.mkdirs();
}
try {
//将文件转存到指定位置
file.transferTo(new File(basePath+fileName));
} catch (IOException e) {
e.printStackTrace();
}