Java的件上传有很多种实现方式,原生的java程序使用的都是HttpServletRequest来接收前台的文件数据,然后通过file进行转换等等来实现的。
本文章是使用springboot来实现文件上传的功能:
废话不多说,直接上代码
依赖部分我就不放上来了。
1、首先,在配置文件中定义好文件的上传大小限制,Spring Boot工程嵌入的tomcat限制了请求的文件大小默认为1MB,单次请求的文件的总数不能大于10Mb.要更改这个默认值需要在配置文件(如application.properties)进行如下设置。
# 启用多部分文件
spring.servlet.multipart.enabled=true
#=======文件上传
#文件大小设置
#单个文件的大小
spring.servlet.multipart.max-file-size=30MB
#单次请求的文件的总大小
spring.servlet.multipart.max-request-size=1000MB
#Tomcat的上传文件最大值
server.tomcat.max-http-form-post-size=-1
2、配置文件定义完就到前端的代码啦。
<form th:action="@{/user/uploadFile}" method="post" enctype="multipart/form-data">
<input name="file" th:type="file">
<button type="submit">上传</button>
</form>
注意:一定要在form标签中加上 enctype=“multipart/form-data” 属性,否则后面执行时会报错。
3、接下来就是后台的代码了,这个很简单,都注释的非常清楚了,代码也少。
@RequestMapping(value = "/uploadFile",method = RequestMethod.POST)
@ResponseBody
//@RequestParam()注解的参数要和前端代码name属性值对应
public String file(@RequestParam("file") MultipartFile multipartFile){
//判断文件是否为空 isEmpty
if (multipartFile == null){
return "文件为空";
}
//获取文件的原名称 getOriginalFilename
String OriginalFilename = multipartFile.getOriginalFilename();
//获取时间戳和文件的扩展名,拼接成一个全新的文件名; 用时间戳来命名是为了避免文件名冲突
String fileName = System.currentTimeMillis()+"."+OriginalFilename.substring(OriginalFilename.lastIndexOf(".")+1);
//定义文件存放路径
String filePath = "H:\\admin\\springbootFile\\";
//新建一个目录(文件夹)
File dest = new File(filePath+fileName);
//判断filePath目录是否存在,如不存在,就新建一个
if (!dest.getParentFile().canExecute()){
dest.getParentFile().mkdirs(); //新建一个目录
}
try {
//文件输出
multipartFile.transferTo(dest);
}
catch ( Exception e) {
e.printStackTrace();
//拷贝失败要有提示
return "上传失败";
}
return "上传成功";
}
好了,到这里文件上传就写好了,接下来就去测试一下;下面就是我的执行结果