关于文件,我一般都是存在oss里面的,因为比赛可能要用到,所以又去学了一下存在服务器里面,关于这里,我是存本地目录的
单文件上传
首先创建一个springBoot项目,这个就不说了
然后创建一个文件上传的html页面
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" >
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form method="post" th:action="@{/file}" enctype="multipart/form-data">
作者:<input type="text" name="name">
文件 <input type="file" name="file">
<input type="submit" name="提交">
</form>
</body>
</html>
这里的表单一定要添加**enctype=“multipart/form-data”**属性,这块不清楚的可以去看一下Html表单
然后是controller层的代码。
//单文件接口
@RequestMapping("/file")
@ResponseBody
public String file(MultipartFile file,String name){
System.out.println(name+"上传了");
return fileService.upload(file);
}
使用MultipartFile类来处理文件上传
接下来是Servlce层的代码,接口我就不复制了,
@Service
public class FileServiceImpl implements FileService {
@Override
public String upload(MultipartFile multipartFile) {
if(multipartFile.isEmpty()){
return "上传文件不能为空";
}
//写入时可能有异常,
try{
//1、设置文件存储位置
String path="E:\\java\\文件";
File f=new File(path);
if(!f.exists()){
//如果文件路径不存在,则创建
f.mkdir();
}
// 文件写入
//multipartFile.getOriginalFilename()//获取文件原名称
//System.currentTimeMillis();//获取当前时间戳
File dir=new File(path+"\\"+System.currentTimeMillis()+multipartFile.getOriginalFilename());
multipartFile.transferTo(dir);
return "文件上传成功";
}catch (Exception e){
e.printStackTrace();
return "文件上传失败";
}
}
说一下需要注意的地方,
1、在文件命名时,最后使用当前时间戳,避免文件名重复导致文件被覆盖
2、一定要处理异常,最好是当前自己处理,不要抛出
3、在设置文件储存位置时,在项目开发中,通过配置文件来设置,上面只是学习,为了方便。
多文件上传
还是一样,创建一个Html页面
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>多文件上传</title>
</head>
<body>
<form method="POST" enctype="multipart/form-data" th:action="@{/files}">
<p>文件1:</p> <input type="file" name="file">
<p>文件2:</p><input type="file" name="file">
<p><input type="submit" value="上传"></p>
</form>
</body>
</html>
这里需要注意的是,多文件上传时,接受文件的input控件名字是一样的,在后台我们接受的是一个文件数组
然后是controller层的代码。
//多文件接口
@RequestMapping("/files")
@ResponseBody
//多文件上传必须加@RequestParm()注解来确定上传的文件数组
public String files(@RequestParam("file") MultipartFile[] files){
// System.out.println(files.length);
System.out.println(files==null);
return fileService.uploads(files);
}
需要注意的是 多文件上传必须加@RequestParm()注解来确定上传的文件数组
接下来是Servlce层的代码
@Override
public String uploads(MultipartFile[] files) {
//判断文件数组是否为空或者长度为0
if(files!=null&&files.length>0){
//设置文件存放路径
String filepath="E:\\java\\文件\\";
for(MultipartFile mf :files){
//获取文件后缀
//String suffixName = fileName.substring(fileName.lastIndexOf("."));
// // 重新生成文件名
// fileName = UUID.randomUUID()+suffixName;
//获取原文件名称
String filename=mf.getOriginalFilename();
if(mf.isEmpty()){
//文件是否为空
return "文件上传失败,文件为空";
}
//创建文件
File dir=new File(filepath+System.currentTimeMillis()+filename);
try{
//写入文件
mf.transferTo(dir);
System.out.println("上传成功");
return "文件上传成功";
}catch (IOException e){
return "文件失败";
}
}
System.out.println("多文件上传成功");
}
return "文件不能为空a";
}
}