GitHub本人springbootUploadFile链接:Fegert/springbootUploadFile
(一篇代码博客)
springboot项目的Resources包下static包下建:
SpringBoot官方文档告诉我们,statis这个目录里面应该存放一些静态文件,比如
css、js、image并且可以直接被外部访问到。而templates这个目录则存放一些静态页面,如jsp、html、ftl。并且template这个目录里的内容外部是访问不到的。按照规范,我们将picUpload.html文件放到templates目录下。
> <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form enctype="multipart/form-data" method="post" action="/upload">
<!--注意form标签里的enctype属性必须指定为:multipart/form-data-->
文件:<input type="file" name="file"/>
<!--name属性值必须与controller中的-->
<input type="submit" value="上传"/>
</form>
</body>
</html>
controller层代码:
/*注意这里的name="file",与上方file标签中的name属性值对应*/
public String uploadFile(@RequestParam(name = "file") MultipartFile multipartFile) {
//指定存放文件路径
String fileDir = "/usr/local/src/static/img";
File dir = new File(fileDir);
//判断目录是否存在,不存在则创建目录
if (!dir.exists()) {
dir.mkdir();
}
/**生成新的文件名,防止文件名重复而导致文件覆盖*/
//1.获取源文件的后缀名
String originalFileName = multipartFile.getOriginalFilename();
String suffix = originalFileName.substring(originalFileName.lastIndexOf('.'));
//2.使用UUID生成新的文件名
String newFileName = UUID.randomUUID() + suffix;
//生成文件
//生成文件
File file = new File(dir, newFileName);
try {
//传输文件内容
multipartFile.transferTo(file);
System.out.println("文件上传成功");
} catch (IOException e) {
System.out.println("上传文件失败");
e.printStackTrace();
}
log.info("这个controller运行了");
return "http://129.211.66.191/usr/local/src/static/img/" + newFileName;
}