开发者学堂课程【SpringBoot 实战教程: SpringBoot 实现文件上传】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/651/detail/10808
SpringBoot 实现文件上传
1、首先需要依赖 web 包,在依赖它时,文件上传的架包就自动依赖了,页面的处理使用 thymeleaf 模板,加上依赖,一共是两个依赖。把依赖放到工程中,写好启动类,导入,这是架包的处理。
<!--springbootweb支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--thymeleaf模板依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2、如果想要控制上传文件的大小,可以在全局配置文件中上传以下两个配置。
multipart.maxFileSize=500Mb
上传单个文件的大小,最大是500mb
multipart.maxRequestSize=500Mb
上传所有文件的总大小
创建全局配置文件,application.properties
3、做一个实现上传的页面,用的是 thymeleaf 模版,在 resources 下创建 templates 文件夹,创建 html 页面
< !DOCTYPE html>
<html>
<head>
<meta charset= "UTE-8">< /meta>
<title>文件上
传
</title>
</head>
<body>
<h2>文件上
传
</h2>
<hr/>
< form
method= "POST" enctype= "multipart/form-data"
action="/upload">
页面里面写一个表单,提交方式是 post,注意 enctype,因为是上传,所以 enctype 不能使用默认的,要使用 multipart/form-data
<p>
文件<input type="file" name="file" />
file类型
</p>
<p>
<input type= "submit" value="上
传
" />
上传
</p>
</ form>
</body>
</html>
4、创建 controller,命名为 UploadController。
加注解,写功能。
@Controller
public class UploadController {
@Reques tMapping (value="/upload" , method=RequestMe thod. POST)
因为上传是 post 方式,所以要进行请求方式,首先指定请求路径是 upload,请求方式是 method
@ResponseBody
上传成功或者失败的字符串
public string uploadFile (MultipartFile file,
HttpServletRequest
request
)
得到用户选择上传的文件,name叫file,名字要和表单的名字相同,就能够得到用户上传的文件
{
Try
{
实现上传
//创建图片或文件在服务器端的存放路径
创建 webpp 文件夹。希望用户上传的文件放在 upload 文件夹下,需要创建 upload 文件夹,首先需要得到 webpp 的路径,在它下面再创建 upload 文件夹,这时需要用 HttpServletRequest request 对象。
String dir=request.getServletContext().getRealPath(" /upload") ;
得到绝对路径,现在 upload 路径不存在,所以需要创建
File fileDir
=
new
File (dir) ;
if(! fileDir .exists () )
fileDir .mkdirs () ;
/ /生成文件在服务器端存放的名字,要保证不能重名
//首先得到用户上传文件的后缀,就是扩展名,再生成不重复的名字。
代表用户上传的文件,上传文件原始的名字,原始的名字再去截取即可,截取的是扩展名,所以从点后面开始截取即可。
String fileSuffix=file.getOriginalFilename (). substring (file.getOriginalFilename () . lastIndexOf (".")
);
//生成文件名
String
fileName=UUID. randomUUID() . toString() +fileSuffix;
//封装 file 对象,filedir 代表 upload 的绝对路径
File files
=
new
File(fileDir+‘’
/
‘’
+
fileName)
;
//上传
file. transferTo (files)
;
}
catch ( Exception
e)
{
e.printStackTrace () ;
Return
’’
上传失败
’’;
如果发生异常说明上传失败
}
Return
’’
上传成功
’’;
}
}
5、访问 upldad.html 页面,但是这个页面不能直接访问,因为它在 templates 下,写一个 controller,通过 controller 跳转到这个页面。
@RequestMapping ("
/
index")
Public
String toUpload()
{
return"upload";
}
6、进行包的扫描,在启动类中进行扫描,controller 包。
@SpringBootApplication(scanBasePackages="com.qi anfeng"
)
7、启动,先访问 index 的 controller,因为需要显示页面,在页面上选择上传的文件,所以请求路径是 index。
localhost:8080/index
这就是 html 页面,选择要上传的文件。
点击上传,显示上传成功。
刷新,可以看到服务器端生成一个文件夹,名字是用 uid 生成的。
这就是在 springboot 中如何实现文件的上传。